Ruby on RailsからPHPにウェブサイトを更新しています。 Ruby on RailsでDevise Gemによって生成されたパスワードを生成する必要があります。 私はPHPで同じメソッドを作成するためのパスワードのハッシング方法が何であるか知っていなければなりません。 しかしRuby on Railsのコードを初心者として見つけるのは容易ではありません。 誰かがどこでそれを見つけるためにチェックすべきか知っていれば、私を助けてください。Ruby on RailsのDevise Gemと同じようにPHPでパスワードを生成するには
これら二つは、私が見つけたもの全てです:
1) The configuration of encryptor is disabled in devise.rb like below:
# config.encryptor = :sha1
2) I read the comments very carefully then I found that they using sha512 and bcrypt as default encryptor.
# (default), :sha512 and :bcrypt. Devise also supports encryptors from others
私はPHPと異なる方法で同じ暗号化されたパスワードを作ってみました:
1) sha1('--'.$password_salt.'--'.$encrypted_password);
2) sha1($password_salt.'-----'.$encrypted_password);
3) sha1('--'.$password_salt.'--'.$encrypted_password.'--');
4) sha1($password_salt.$encrypted_password);
5) sha1($encrypted_password.$password_salt);
6) substr(hash('sha512', $password_salt.$encrypted_password, false), 20);
7) substr(hash('sha512', $encrypted_password.$password_salt, false), 0, 40);
8) hash('sha512', $encrypted_password.$password_salt, false);
9) hash('sha512', $password_salt.$encrypted_password, false);
10) substr(hash('sha512', '--'.$password_salt.'--'.$encrypted_password.'--', false), 0, 40);
私はいずれかから同じ結果を得ることができませんでした上記の Devise Gemの暗号化方法を教えてくれる人はいますか?
私を助けてください!
ps。私は英語がうまくない。私の英語が正しくない場合でも、怒らないでください。
私は自分自身に答えています:
EncryptorははSHA1
である私が暗号だった "\ CONFIG \初期化子" フォルダにのみ "devise.rb" を探していました"#config.encryptor =:sha1"とコミットされました しかし、Rubyのlibフォルダの中にもう1つの "devise.rb"があります。 "\ Ruby191 \ lib \ ruby \ gems \ 1.9.1 \ gems \ devise-1.0.8 \ lib \ devise.rb " もう1つの構成がありますイオン1.9.1 \宝石\ \ Ruby191 \ libに\ルビー\宝石:あなたが以下のファイルに行くときSHA1 を使用して、「@@暗号= SHA1」
暗号化方式は、アルゴリズムのためのコードが表示されます\考案-1.0.8 \ libに\工夫\暗号
が必要\ sha1.rb "ダイジェスト/ SHA1は"
モジュール モジュールの暗号を考案 #= SHA1 #はパスワードを暗号化するためにSHA1ハッシュアルゴリズムを使用します。 クラスSHA1 <ベース
# Gererates a default password digest based on stretches, salt, pepper and the # incoming password. def self.digest(password, stretches, salt, pepper) digest = pepper stretches.times { digest = self.secure_digest(salt, digest, password, pepper) } digest end private # Generate a SHA1 digest joining args. Generated token is something like # --arg1--arg2--arg3--argN-- def self.secure_digest(*tokens) ::Digest::SHA1.hexdigest('--' << tokens.flatten.join('--') << '--') end end end
だから私はPHP
function encrypt_password($salt, $password) { $pepper = ''; $digest = $pepper; $stretches = 10; for ($i=0; $i<$stretches; $i++) { $join = '--'.$salt.'--'.$digest.'--'.$password.'--'.$pepper.'--'; $digest = Sha1($join); } $result = substr($digest, 0, 40); return $result; }
に翻訳終了
それは工夫宝石筋によると
あなたが考案暗号化パスワードのペアをテスト目的のために/私にパスワードを与えることができる参照してください?私は現在、正解のための逸話のソースを読んでいます。私はテストしたいです。 – GergelyPolonkai
GitHubのDeviseソースコードを見てみると、各ユーザーに合わせて変更する必要がある塩をハッシュに追加することに加えて、Deviseはハッシュにペッパー値(インストールごとに同じ)を追加することを提案していますこれはDevise構成から読み取られます。だから、あなたはconfigファイルからその値を知る必要があるでしょう。 (私はRubyプログラマーではないので、間違って読んでいれば申し訳ありません...) – Jazz
最後に私は知っていました... DeviseはBcryptを使っていました...私はColdfusionと同様の問題がありました。オブジェクト。 PHPがそれを行うことができたらDunno ... –