密码加密算法
Password encryption algorithm
我想开发一个网络应用程序,用户可以在其中输入他们的电子邮件和密码(在注册时选择)登录。我想知道哪种是最好的密码哈希算法。我读过 bcrypt 是一个不错的选择,但是像 facebook 这样的网站使用什么算法?
您永远不应该存储密码,即使它是加密的。因为加密的东西可以被解密,所以攻击者可以做同样的事情。
Google 对于 "hashing" 和 "salting",也许 OWASP 有一些建议如何正确地做到这一点。我认为,存储加密密码将列在要避免的漏洞列表中。
您需要在数据库中存储哈希值和盐值并使用它们进行身份验证。当我实现这个时,这篇文章尤其对我很有帮助:http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right
我写了两个处理密码的函数。第一个接受字符串(即您的密码)和 returns 种子哈希。它采用时间的 MD5 散列并将其添加到字符串之前。然后它采用该字符串的 SHA256 哈希值。然后它将原始 MD5 哈希值添加到 SHA256 哈希值之前。函数returns这个96个字符的字符串。第二个函数采用 2 个字符串作为参数(被测试的密码和你测试它的密码哈希)和 returns 一个布尔值。这是PHP,但逻辑当然是可以移植的
function hash_password( $password ){
$md5 = strtoupper( hash( 'md5', time() ) );
$hash = $md5 . strtoupper( hash( 'sha256', $md5 . $password ) );
return $hash;
}
function test_password( $password, $hash ){
$md5 = substr( $hash, 0, 32 );
$sha256 = substr( $hash, 32 );
if( $sha256 == strtoupper( hash( 'sha256', $md5 . $password ) ) )
return true;
else
return false;
}
我想开发一个网络应用程序,用户可以在其中输入他们的电子邮件和密码(在注册时选择)登录。我想知道哪种是最好的密码哈希算法。我读过 bcrypt 是一个不错的选择,但是像 facebook 这样的网站使用什么算法?
您永远不应该存储密码,即使它是加密的。因为加密的东西可以被解密,所以攻击者可以做同样的事情。 Google 对于 "hashing" 和 "salting",也许 OWASP 有一些建议如何正确地做到这一点。我认为,存储加密密码将列在要避免的漏洞列表中。
您需要在数据库中存储哈希值和盐值并使用它们进行身份验证。当我实现这个时,这篇文章尤其对我很有帮助:http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right
我写了两个处理密码的函数。第一个接受字符串(即您的密码)和 returns 种子哈希。它采用时间的 MD5 散列并将其添加到字符串之前。然后它采用该字符串的 SHA256 哈希值。然后它将原始 MD5 哈希值添加到 SHA256 哈希值之前。函数returns这个96个字符的字符串。第二个函数采用 2 个字符串作为参数(被测试的密码和你测试它的密码哈希)和 returns 一个布尔值。这是PHP,但逻辑当然是可以移植的
function hash_password( $password ){
$md5 = strtoupper( hash( 'md5', time() ) );
$hash = $md5 . strtoupper( hash( 'sha256', $md5 . $password ) );
return $hash;
}
function test_password( $password, $hash ){
$md5 = substr( $hash, 0, 32 );
$sha256 = substr( $hash, 32 );
if( $sha256 == strtoupper( hash( 'sha256', $md5 . $password ) ) )
return true;
else
return false;
}