PHP - 用 openssl_random_pseudo_bytes() 替换 mcrypt_create_iv()

Posted

技术标签:

【中文标题】PHP - 用 openssl_random_pseudo_bytes() 替换 mcrypt_create_iv()【英文标题】:PHP - Replacing mcrypt_create_iv() with openssl_random_pseudo_bytes() 【发布时间】:2012-08-27 19:27:20 【问题描述】:

我需要提高我们网站的安全性,目前正在使用这里的指南:http://crackstation.net/hashing-security.htm,以及这里的随机密码生成:https://defuse.ca/generating-random-passwords.htm。我收集到两者都使用函数mcrypt_create_iv() 来生成随机字节(或位?),但由于某种原因,我在 CentOS 6 下安装 php-mcrypt 时遇到错误。幸运的是,第一个链接说 openssl_random_pseudo_bytes() 是 CSPRNG (以及 PHP 文档和其他来源也支持该声明),并且在 PHP 5.4 的当前服务器安装中可用,所以我目前别无选择,只能使用它。考虑到这些,我想问以下问题:

    直接代码替换是否足够而不影响安全性? (也就是说,只需将对 mcrypt_create_iv() 的调用替换为 openssl_random_pseudo_bytes() 就可以了?)

    关于代码中提到的常量 (http://crackstation.net/hashing-security.htm#properhashing),指南说“[m]确保你的盐至少和哈希函数的输出。”我是否正确假设 PBKDF2_SALT_BYTESPBKDF2_HASH_BYTES 都设置为 24 字节,因为 pbkdf2() 函数的输出将只有 24 字节,而不是 32(对于 256 位),因为使用的底层算法是 sha256 ? (是的,我也在使用键拉伸。)在相关说明中,24 字节是否可以,或者应该增加/减少,会有什么影响?

非常感谢那些愿意回答的人。

【问题讨论】:

另见Upgrading my encryption library from Mcrypt to OpenSSL和Preparing for removal of Mcrypt in PHP 7.2 【参考方案1】:
    我认为安全性不会受到影响,因为这两个函数都只是加密安全的伪随机数生成器(注意:openssl_random_pseudo_bytes($len, true)mcrypt_create_iv($len, MCRYPT_DEV_RANDOM))。 PBKDF2_SALT_BYTES 仅用于测试函数create_hash() 而不是pbkdf2() 本身。因此,您只需使用这些 CSPRNG 实现您自己的盐生成功能。

【讨论】:

感谢您的回复,但我还是想澄清一点:24字节可以吗,还是应该增加? @shippou 我不是加密专家,但我认为 24​​ 个符号很难暴力破解,根据this 计算器,在一台计算机上大约需要 358 六亿年(24 — HMAC MD5 — ualpha 数字)。 感谢您的澄清和链接!我真的不知道那个网站存在。感谢您的推荐。 :) 请注意 openssl_random_pseudo_bytes($len, &$crypto_strong = null) 所以传入 true 作为第二个参数只会抛出警告它在那里表明密码使用是否强大(docs)

以上是关于PHP - 用 openssl_random_pseudo_bytes() 替换 mcrypt_create_iv()的主要内容,如果未能解决你的问题,请参考以下文章

什么是php的框架 ThinkPHP这个又是怎么用的

怎么用php读取并显示另一个php文件的内容?

php 用哪个版本的MySQL好?

用 php.exe 执行 php 文件

如何用php 编写网络爬虫?

做网页必须要用PHP和js吗