我正在將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。我不擅長英語。即使我的英文不對,請不要生氣。
我回答自己:
加密器是SHA1
我一直在尋找的文件夾中唯一的 「devise.rb」 「\設置\初始化」 的加密是作爲「#config.encryptor = sha1」 但是在Ruby lib文件夾中還有一個「devise.rb」,其中「\ Ruby191 \ lib \ ruby \ gems \ 1.9.1 \ gems \ devise-1.0.8」 \ lib \ devise.rb「 還有一個配置文件離子作爲 \ Ruby191 \ LIB \紅寶石\寶石\ 1.9.1 \寶石:使用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 2012-04-17 22:08:02
快速瀏覽GitHub上的設計源代碼表明,除了向散列中添加salt(應該爲每個用戶更改)之外,Devise還會爲散列添加一個胡椒值(對於每個安裝而言都是相同的) ,這是從Devise配置中讀取的。所以你可能需要從配置文件中知道這個值。 (我不是Ruby程序員,對不起,如果我讀錯了......) – Jazz 2012-04-17 22:28:48
最後我知道...... Devise正在使用Bcrypt ...我有一個與Coldfusion類似的問題,只是稱爲Java庫作爲目的。不知道,如果PHP可以做到這一點... – 2012-04-17 22:36:31