php - 如何使用河豚自动为crypt方法生成盐

标签 php passwords blowfish crypt

我刚开始学习 PHP,我想为我最后一年的大学项目创建一个带有登录名的网站。我读过河豚是在许多地方散列的最佳方法,如下所示:openssl_digest vs hash vs hash_hmac? Difference between SALT & HMAC?

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

我还听说 AES 是最近的首选技术,但据我所知,用 PHP 实现它似乎非常棘手! blowfish 仍然是一种可以接受的保护存储密码的方法吗?

最佳答案

盐应该唯一(对于每个密码)并且不可预测。这两个标准有点难以用确定性计算机来满足,所以您能做的最好的事情就是使用操作系统的随机源来生成盐。

时间戳,以及mt_rand()功能,并不理想,因为可以说它们是可预测的。至少攻击者可以缩小(并因此预先计算)特定时期的可能组合。虽然这在实践中可能不会产生太大影响,但为什么不尽力而为呢?

从 PHP 5.3 开始,您可以安全地使用 mcrypt_create_iv()函数从随机源读取,那么你必须将二进制字符串编码为允许的字母表。这是 possible implementation .

PHP 5.5 将拥有自己的函数 password_hash()password_verify()准备好,简化这个任务。还有一个compatibility pack适用于 PHP 5.3/5.4,可在 password_compat 下载.

关于php - 如何使用河豚自动为crypt方法生成盐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556516/

相关文章:

cakephp - cakephp 2.4.2 中的 Blowfish 身份验证

php - 是否可以在 php 中将 mysql 5.6 的加密 CNF 文件与 mysqli 或 PDO 一起使用?

php - 如何在 codeigniter 中强制使用 ssl?

php - 在 Swift 中检索和使用整个 MYSQL 表

java - 需要帮助将一些 Java 加密转换为 PHP

android - 开源用户安全/密码方案

ios - iOS 应用程序上的一次性密码 - 建议未出现在键盘上方

php - Cookie 加密/解密

javascript - 使用 node.js 解密 mcrypt 编码的文本

php - 使用带 Ruby 的 Blowfish 验证在 PHP 中加密的密码