PHP - 用 openssl_random_pseudo_bytes() 替换 mcrypt_create_iv()

标签 php openssl mcrypt

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

  1. 在不影响安全性的情况下,直接代码替换是否足够? (也就是说,只需将对 mcrypt_create_iv() 的调用替换为 openssl_random_pseudo_bytes() 即可?)

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

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

最佳答案

  1. 我认为安全性不会受到影响,因为这两个函数只是加密安全的伪随机数生成器(注意:openssl_random_pseudo_bytes($len, true)mcrypt_create_iv($len, MCRYPT_DEV_RANDOM)).
  2. PBKDF2_SALT_BYTES 仅用于测试函数 create_hash() 而不是 pbkdf2() 本身。因此,您只需使用这些 CSPRNG 实现您自己的盐生成函数即可。

关于PHP - 用 openssl_random_pseudo_bytes() 替换 mcrypt_create_iv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241418/

相关文章:

php - 基于 session 的登录无法正常工作

php - 制作实时搜索功能

php - 您必须启用 openssl 扩展才能通过 https 下载文件

mysql - 使用 openssl 加密字段过滤 MySQL 表

php - 为什么用 PHP 加密的东西与用 Ruby 加密的相同字符串不匹配?

macos - Mac OS X上需要Mcrypt PHP扩展

php - 从表中获取全部内容

ssl - 无法解决此错误 : error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112) -- any ideas on what to try?

php - 使用 Blowfish 和 ECB 将 mcrypt 迁移到 OpenSSL

javascript - 不允许用于访问此页面的 HTTP 动词