什么是通过电子邮件验证帐户的好PHP哈希算法?

什么是通过电子邮件验证帐户的好PHP哈希算法?,php,security,Php,Security,为新用户创建哈希(作为验证id)以验证其帐户的最佳算法是什么 MD5似乎是我所看到的任何地方的答案,但所有的来源都至少有3或4年的历史。我只是想确保MD5仍然是今天最好的选择 我使用password\u hash()函数来处理密码,我相信它使用了Blowfish算法并添加了一个随机salt,但是这对于验证ID来说是必要的吗?MD5可以生成一个hash,如果您只想创建验证令牌,您可以使用以下方法: $token = md5(uniqid(mt_rand(), true)); 除非您使用salt,

为新用户创建哈希(作为验证id)以验证其帐户的最佳算法是什么

MD5似乎是我所看到的任何地方的答案,但所有的来源都至少有3或4年的历史。我只是想确保MD5仍然是今天最好的选择


我使用
password\u hash()
函数来处理密码,我相信它使用了Blowfish算法并添加了一个随机salt,但是这对于验证ID来说是必要的吗?

MD5可以生成一个hash,如果您只想创建验证令牌,您可以使用以下方法:

$token = md5(uniqid(mt_rand(), true));
除非您使用salt,否则不要将MD5用作密码,即使这样,您也应该使用更强的bcrypt算法


另请参见

为此,MD5只是一种“编码”。只要运行MD5的源值是正确的随机值,就可以安全地使用它

任何随机(使用适当的算法)128位值都将生成一个文件(GUID(只要是)或base64编码的加密随机字节数组,或同一数组上的MD5)

你只需要确保它不会被猜测。因此,大多数情况下,您希望通过IP地址添加某种无效的令牌计数器,在一定次数后阻止访问


同样,出于同样的原因,您可能希望为代码添加某种过期时间(如24小时有效)。

一般来说,如果您希望散列某些内容,MD5是您的基线。对于验证ID,您可能不需要使用salt,这取决于您,但您始终希望运行MD5哈希的次数大于1。我使用
openssl\u random\u pseudo\u bytes($length)长度=16
。需要进行url编码。md5是一种较弱的算法。我通常使用sha1,但是为了更安全,您可以扩展到任何散列算法(我的工作场所最近使用了sha256来实现更高的安全性散列)。谢谢,我也喜欢您建议的额外预防措施。