鉴于我知道哈希密码,盐和&使用Authlogic生成的原始密码(ruby on rails gem)。
PHP是否可以设计一个函数来检查用户密码是否与数据库中的用户Ruby Authlogic hashed_pw相匹配?我需要将现有的PHP应用程序与ruby应用程序集成,而无需重置所有Ruby用户密码。
我尝试了类似下面的内容,但似乎无法正常工作
function passwordhash($password, $salt)
{
return hash('sha512', "{$password}:{$salt}");
}
echo passwordhash("orange","NsxUt51YVzK4dFeVJOj");
output: 7b4a69291354dc3591e490f47f29d5a4a4b6d7faa23d01a1ee595b917526b65e2dda48e978c46b81dde0269adc3f853a36c075d236eb89c8f6b21811fe3da1bb
数据库信息
crypted_password
f777c545bf9844faaa5f3b129e77e4199539793d907e397ddc97d1bb747a30d402201bd11ed9ca0eaecbf3b9652b314aa919d65904c64d4169ce0e1ac1c526a4
password_salt
NsxUt51YVzK4dFeVJOj
real password
orange
似乎这应该是可能的,我错过了什么?
谢谢, 莱恩
答案 0 :(得分:2)
我对authlogic代码的细读提示了两件事:
orangeNsxUt51YVzK4dFeVJOj
另一件事是authlogic支持大量的散列策略 - 确保你试图重新实现正确的散列策略!当然看起来20折sha512是正确的。
链接:https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/crypto_providers/sha512.rb
答案 1 :(得分:0)
我设法重现了ruby gem authlogic sha512实现,如下所示:
/**
* implements ruby gem authlogic sha512 encryption
* @param $password
* @param $salt
* @return string
*/
private function sha512hash($password, $salt) {
$strechtes = 20;
$digest = $password . $salt;
for ($i = 0; $i < $strechtes; $i++) {
$digest = hash('sha512', $digest);
}
return $digest;
}