Ruby on Rails から PHP に Web サイトをリニューアルしています。Ruby on Rails で Devise Gem によって生成されるパスワードを生成する必要があります。PHPで同じメソッドを作成するには、パスワードのハッシュ方法が何であるかを知る必要があります。しかし、初心者が Ruby on Rails 内のコードを見つけるのは簡単ではありません。誰かがそれを見つけるためにどこをチェックすればよいか知っているなら、私を助けてください.
これら2つはすべて私が見つけたものです:
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。私は英語がうまくない。私の英語が正しくなくても、どうか怒らないでください。
私は自分自身に答えています:
暗号化は Sha1 です
「\config\initializers」フォルダにある「devise.rb」だけを見ていたら「#config.encryptor = :sha1」と暗号化コマンドが書かれていたのですが、Ruby libフォルダの中に「devise.rb」がもう一つ「\ Ruby191\lib\ruby\gems\1.9.1\gems\devise-1.0.8\lib\devise.rb」 「@@encryptor = :sha1」という設定がもう一つあります
Sha1 を使用した暗号化方法 以下のファイルに移動すると、アルゴリズムのコードが表示されます: \Ruby191\lib\ruby\gems\1.9.1\gems\devise-1.0.8\lib\devise\encryptors\sha1.rb
「ダイジェスト/sha1」が必要
module Devise module Encryptors # = 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;
}
それは非常にうまく機能しています:-)