PHP-密码重置安全吗?

我想知道是否使用substr(md5(rand()),0,17);密码重置链接足够安全吗?如果我要生成一个更长的字符串,那会使它更安全吗? MD5绝对安全吗?还是我应该做$token = sha1(uniqid($username,true));?

解决方法:

substr()或md5()的使用仅次于rand()的使用.

使用密码重置令牌的全部要点是它们不可预测,并且由于底层的LCG模型,已知rand()较弱.

最好使用系统的熵源,例如:

$rand = openssl_random_pseudo_bytes(8); // take 8 random bytes
$token = substr(md5($rand), 0, 17);

它从系统的随机源中获取字节,例如Linux上的/ dev / urandom或Windows上的相应系统.

请注意,如果没有任何特定的大小限制,则最好选择完整的sha1()输出并采用16个随机字节.

另外,在将密码重置令牌存储在数据库中时,应将其视为(临时的,有时间限制的)密码.我建议将上述令牌发送给用户,然后在将它们写入数据库之前使用password_hash().在以后的阶段中,您可以使用password_verify()检查给定的令牌(假设令牌没有过期).

上一篇:C#中应用程序配置文件的“静态”加密


下一篇:python-如何使用RSA加密和解密AES密钥并存储在文本文件中