Rijndael 192 位块大小 mcrypt 替代方案

Posted

技术标签:

【中文标题】Rijndael 192 位块大小 mcrypt 替代方案【英文标题】:Rijndael 192-bit block size mcrypt alternative 【发布时间】:2018-07-03 14:24:44 【问题描述】:

请先阅读此问题,然后再将其视为重复(尽管如果确实如此,我不知道为什么我找不到它,但太好了!!)

多年来,我们一直在 cfb 模式下将 mcrypt 与 rijndael-192 模块一起使用。我们有很多用它加密的东西。

我们必须迁移到的 php 7.2 不再包含 mcrypt。

Openssl AES 不支持 192 块大小(或 128 以外的任何块大小)。所以接下来我将改变对称加密。

我遇到的问题是遗留数据,如果没有 mcrypt,我看不到如何继续解密它。没有修改遗留数据的选项,因为这对我们来说是不可行的。

所以我的问题是,如何解密使用 rijndael 加密的数据,块大小为 192,不使用 mcrypt?

谢谢

【问题讨论】:

AES-192-CFB - 192 是 KEY 长度,而不是块大小。 AES 仅支持 128 块大小 @LawrenceCherone Rijndael-192 (not to be confused with AES-192) 了解更多信息:wiki.php.net/rfc/mcrypt-viking-funeral 你不能用 PHP 7.1 解密/重新加密吗? 离题了,但是...... 192 位块大小是不寻常的。为什么选择它? @superphonic - 这里有几个类似的问题,但我不相信它们会对你的情况有所帮助。 Can't decrypt using pgcrypto from AES-256-CBC but AES-128-CBC is OK、MCrypt rijndael-128 to OpenSSL aes-128-ecb conversion 等。另见 Upgrading my encryption library from Mcrypt to OpenSSL、Replace Mcrypt with OpenSSL 和 Preparing for removal of Mcrypt in PHP 7.2 【参考方案1】:

我认为我应该报告,因为我讨厌问题悬而未决。

除了使用 mcrypt 库之外,我没有发现其他方法可以在 PHP 中使用 192 块大小来解密 Rijndael(AES) 密码。我有两个选择:

    从 PHP PECL 扩展库安装 PHP 7.2 中的 mcrypt 并继续使用它。 使用 mcrypt 库在 PHP 7.1 中解密我的数据,并使用具有 128 个块大小的 openssl AES 密码重新加密。

我们选择了选项 2。虽然它缓慢而痛苦,但远离 mcrypt 显然是更好的长期解决方案。

【讨论】:

以上是关于Rijndael 192 位块大小 mcrypt 替代方案的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js 中重新创建 MCRYPT_RIJNDAEL_128

如何存储 mcrypt_module_open('rijndael-256','','ofb','');在 MYSQL

codeIgniter PHP 8.0中未定义的常量“MCRYPT_RIJNDAEL_128”[重复]

解密在 PHP 中使用 MCRYPT_RIJNDAEL_256 加密的 Python 字符串

使用 Rijndael_256(AES) 从 PHP mcrypt 解密 Java 中的数据

如何让 Ruby AES-256-CBC 和 PHP MCRYPT_RIJNDAEL_128 一起玩得很好