更新到 php 5.6.2 时的 mcrypt 警告;不支持大小为 x 的密钥

Posted

技术标签:

【中文标题】更新到 php 5.6.2 时的 mcrypt 警告;不支持大小为 x 的密钥【英文标题】:mcrypt warning on update to php 5.6.2; Key of size x not supported 【发布时间】:2015-05-10 19:15:26 【问题描述】:

php 5.5.18 更新到 PHP 5.6.2 后,我们收到以下警告:

mcrypt_decrypt(): Key of size 20 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported

加密算法在此之前似乎工作正常:

$decrypttext = mcrypt_decrypt(
  MCRYPT_RIJNDAEL_256,
  $this->keys[$key_label],
  $crypttext,
  MCRYPT_MODE_ECB,
  $iv
);

必须重新加密所有内容会很痛苦,我可以用什么东西来填充密钥,以便它像以前一样工作吗?

大概这里没有任何安全漏洞。

【问题讨论】:

查看 5.5 和 5.6 之间的向后不兼容更改,担心您将不得不编写一个 Fixer,因为您从 PHP Documentation 开始做错了 “大概这里没有任何安全漏洞”——这可能是每一个被黑客入侵的服务之前都表现出的态度…… @CBroe “大概这里没有任何安全漏洞” - 我想不出任何安全漏洞,但如果有人知道,你可以告诉我。不像“我不能被安全所困扰”..所以感谢你不必要的高而有力的评论。 str_pad($this->keys[$key_label], "\0", 32) 应该这样做,但是MCRYPT_RIJNDAEL_256?欧洲央行模式?呜呜 :( github 扩展提供经过身份验证的加密。 libmcrypt 自 2007 年以来已被废弃,在 PHP 7 中,可能会被 openssl 取代。 【参考方案1】:

在此更改之前,无效大小的键用\0 填充到下一个有效键大小,因此您应该能够通过在末尾添加四个空字节\0\0\0\0 来对您的键执行相同操作。

现在需要注意的是,这当然是一个弱密钥,不会提供预期的安全级别,但它不会比现在更糟,而且您在如何操作方面还有其他重大安全问题'也在加密,例如使用ECB模式,这通常对安全性是灾难性的。

因此,当您确实决定更新时,选择有效大小的密钥只是需要进行的更改之一,您可能应该尽快这样做你可能可以。

【讨论】:

以上是关于更新到 php 5.6.2 时的 mcrypt 警告;不支持大小为 x 的密钥的主要内容,如果未能解决你的问题,请参考以下文章

将 Mcrypt RC4 转换为 PHP-OpenSSL

我在哪里可以获得 PHP 7 的 php-mcrypt?

Mcrypt弃用后如何解密?

sh 使用自制软件将Mac Os X的php版本更新为php 7.1。包括curl和mcrypt

sh 使用自制软件将Mac Os X的php版本更新为php 7.1。包括curl和mcrypt

sh 使用自制软件将Mac Os X的php版本更新为php 7.1。包括curl和mcrypt