【问题标题】:mcrypt 7.1 deprecated / 7.2+ removalmcrypt 7.1 已弃用 / 7.2+ 移除
【发布时间】:2017-03-19 05:10:12
【问题描述】:

我一直在关注有关使用 mcrypt_create_iv() 生成随机字符串的 SO 信息,并在 3v4l.org 上提供了一些示例代码。

在阅读PHPWiki 之后,所有mycrypt_* 函数都会显示已弃用的警告,但它没有指定将在 7.2/8.0 中使用什么来替换这些函数。

既然声明它将在 7.2/8.0 中移除,那么将用什么来替换 IV?

我没有在我的软件中使用此功能进行加密和解密。我只将它用于安全/检索唯一字符串。

【问题讨论】:

    标签: php deprecated mcrypt


    【解决方案1】:

    random_bytes()

    虽然我想每个 PHP 加密扩展都会提供自己的函数版本来生成随机数据,就像他们目前所做的那样:

    这仅仅是因为如果不访问 CSPRNG,任何加密 API 都是不完整的。事实上,mcrypt_create_iv() 是 PHP 开发人员出于同样的原因添加的,但它不是 libmcrypt 的一部分。


    我只将它用于安全/检索唯一字符串。

    “随机”并不意味着“唯一”。前者需要不可预测,而后者必须不可重复
    确实,随着您添加到字符串中的每个随机字节,发生冲突的几率会呈指数下降,但永远不会 100% 保证唯一性。

    【讨论】:

    • 这太完美了,我喜欢你在我的问题中提到 unique 关键字的方式。困扰我的是整个 读取锁,但是这个 IV 可能会在 同时 与另一个用户接近时重复0.0000(n)1% 我假设?所以只要我们检查数据库条目,这应该接近 99.9% 保证防止读锁? (+1) 例如,请参阅test code
    • @KDOT 你到底想达到什么目的? IV 的目的不是唯一的。它的目的是在加密数据时使用它来生成不同的密文,即使基础数据相同。这用于防止解密尝试。看来您正在尝试将其用于其他用途-如果您能解释真正的问题,我相信会有足够的答案来帮助您。如果我的预感是正确的,那么你以后会做一些可能会“受伤”的事情。
    • 这是用于用户哈希的盐,盐需要复杂但独特@N.B.
    • @KDOT 那么您应该使用 password_hash 而不是使用 IV 滚动您自己的解决方案。
    • 是的,但是如果您查看选项,您可以设置 IV。由于mcrypt_create_iv() 已贬值并很快被删除,我一直在寻找替换IV 以在password_hash() 选项参数@N.B. 中使用。
    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多