繁体   English   中英

密码加密算法

[英]Password encryption algorithm

我想开发一个Web应用程序,用户可以在其中登录并插入其电子邮件和密码(注册时选择)。 我想知道哪种是最好的密码哈希算法。 我已经读过bcrypt是一个不错的选择,但是像facebook这样的网站使用什么算法?

您将需要在数据库中存储哈希和盐,然后将其用于身份验证。 当我实现此功能时,这篇文章尤其对我很有帮助: http : //www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right

即使加密,也永远不要存储密码。 由于可以解密已加密的内容,因此攻击者可以这样做。 Google对于“散列”和“咸化”,也许OWASP提出了一些如何正确执行此操作的建议。 我认为,存储加密密码将是要避免的漏洞列表。

我已经编写了2个用于处理密码的功能。 第一个接受字符串(即您的密码)并返回种子哈希。 它使用时间的MD5哈希值并将其添加到字符串中。 然后,它将获取该字符串的SHA256哈希。 然后,它将原始MD5哈希值添加到SHA256哈希值中。 该函数返回此96个字符的字符串。 第二个函数使用2个字符串作为此参数(要测试的密码和要对其进行测试的密码哈希),并返回一个布尔值。 这是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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM