mcrypt 7.1已被弃用/7.2+已移除

3

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

阅读了PHPWiki后,所有mycrypt_*函数都会显示一个已弃用警告,但它没有指定在7.2/8.0中将替换这些函数的内容。

既然它说明在7.2/8.0中将被删除,那么将用什么来替换IV呢?

我没有在我的软件中使用此函数进行加密和解密。 我只使用它来安全地/检索唯一的字符串。

1个回答

4

random_bytes()

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

这仅仅是因为任何密码学API没有访问CSPRNG将是不完整的。事实上,mcrypt_create_iv()是由PHP开发人员出于同样的原因添加的,而它本身并不是libmcrypt的一部分。


我只用它来安全地/可检索唯一字符串。

“随机”并不意味着“唯一”。前者需要是不可预测的,而后者必须是不可重复的
的确,将每个随机字节添加到字符串中,碰撞的机会将呈指数级下降,但唯一性永远无法保证100%。


这太完美了,我喜欢你在我的问题中提到了“unique”关键字。整个读锁定让我感到困扰,但我认为该IV与另一个用户同时重复的机会接近于0.0000(n)1%?因此,只要我们检查数据库条目,这应该接近99.9%的保障来防止读锁定(+1),请参见[测试代码](https://3v4l.org/mgeUq)示例。 - Jaquarh
@KDOT 你到底想要实现什么?IV的目的不是为了唯一。它的目的是在加密数据时使用它,即使底层数据相同,也会产生不同的密文。这用于防止解密尝试。看起来你正在尝试将其用于其他用途 - 如果你能解释真正的问题,我相信会有足够的答案来帮助你解决问题。如果我的直觉是正确的,你将会做一些可能会在以后“伤害”自己的事情。 - N.B.
这是用于用户哈希盐的内容,盐需要复杂但唯一。@N.B. - Jaquarh
@KDOT,那么你应该使用password_hash,而不是自己用IV来解决问题。 - N.B.
我也以为你在错误的情况下使用了这个函数,但事实证明你是正确地使用它,只是出于错误的原因,哈哈。IV和盐只有在用途上有所不同,但在其他方面都是相同的,并且需要是不可预测的,而不是唯一的。但说到password_hash(),它的“salt”选项也已经被弃用了,恰好我最近也回答了一个关于此问题的问题:https://dev59.com/iJzga4cB1Zd3GeqP_xrl#40378435 - Narf
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接