Php 如何用河豚自动生成crypt方法的盐

Php 如何用河豚自动生成crypt方法的盐,php,passwords,blowfish,crypt,Php,Passwords,Blowfish,Crypt,我刚刚开始学习PHP,我想为我大学最后一年的项目创建一个带有登录名的网站。我已经读到河豚是许多地方散列的最佳方法,比如: 我所读到的关于crypt方法的每一个地方都包含一个字符串,比如$2y$07$UseSomesillyStringForAlt$,我的主要问题是:如何随机生成它?我在一些地方读到时间戳和mt_rand()不安全 另外,我听说AES最近是首选技术,但从我所看到的情况来看,在PHP中实现它似乎相当棘手!blowfish仍然是一种可以接受的保护存储密码的方法吗?blowfish仍然可

我刚刚开始学习PHP,我想为我大学最后一年的项目创建一个带有登录名的网站。我已经读到河豚是许多地方散列的最佳方法,比如:

我所读到的关于crypt方法的每一个地方都包含一个字符串,比如
$2y$07$UseSomesillyStringForAlt$
,我的主要问题是:如何随机生成它?我在一些地方读到时间戳和mt_rand()不安全


另外,我听说AES最近是首选技术,但从我所看到的情况来看,在PHP中实现它似乎相当棘手!blowfish仍然是一种可以接受的保护存储密码的方法吗?

blowfish仍然可以接受,并且优于快速哈希方法


salt的目的是防止预计算表攻击。只要你有一个像microtime这样的非平凡的salt,你就可以阻止任何没有使用该salt的预计算表。

一个salt应该是唯一的(对于每个密码)和不可预测的。这两个标准在确定性计算机上有点难以实现,因此您可以做的最好的事情是,使用操作系统的随机源来生成salt

时间戳及其功能并不理想,因为人们可以说它们是可预测的。至少攻击者可以在一定时间内缩小(并因此预先计算)可能的组合。虽然这在实践中可能没有太大的影响,为什么不尽你所能呢

由于PHP5.3可以安全地使用该函数从随机源读取数据,因此必须将二进制字符串编码为允许的字母表。这是一个很好的例子


PHP5.5将有自己的函数,并且可以简化这项任务。还有一个适用于PHP 5.3/5.4的版本,可在下载。

适用于PHP 5.3.7或更高版本,我相信这是最好的:

$blowfish_salt = "$2y$10$".bin2hex(openssl_random_pseudo_bytes(22));

对于PHP版本5.5或更高版本,只需将新的
密码\u hash()
与自动salt创建一起使用。

它不是随机生成的
$algo$cost$salt$
,其中salt是完全安全的,可以使用带有域名sha1'和
substr(salt,0,21)
的微时间,因为这样就可以删除21个字符。也许我早些时候做的一些事情会让你感兴趣,比如
$password=crypt($\u POST[passward],“$2y$07$”.microtime())可以吗?感谢大家的帮助,bin2hex(openssl_random_pseudo_bytes(22))将返回44个字符。对于php blowfish,您需要bin2hex(openssl_random_pseudo_bytes(11))