【问题标题】:PHP CAST-256 mcrypt output differsPHP CAST-256 mcrypt 输出不同
【发布时间】:2015-06-17 12:29:30
【问题描述】:

我正在尝试通过 PHP 函数 mcrypt_encrypt 使用 CAST256 和 CBC 加密字符串。我使用键 test 和输入 test,生成以下代码:

mcrypt_encrypt(MCRYPT_CAST_256, 'test', 'test', MCRYPT_MODE_CBC);

这个产生的 base64 编码版本(在 PHP 版本 5.5.12 上):

DaypOCFVfoI8ghemj0ZkEg==

但是,我将我的输出与http://www.tools4noobs.com/online_tools/encrypt/ 上的工具进行比较,我的输出差异很大;使用上述密码、模式、密钥和数据的站点输出如下:

eIKnQGAhjsGh+11XZsA2Lg==

使用相反的工具解密每个字符串(即使用 PHP 解密的站点输出,以及通过站点解密的 PHP 输出)给出以下输出:

DUCD000000000000 (site output)
DUCD000000000000 (PHP output)

但是,使用与加密字符串相同的介质进行解密会得到输入数据('test')。

我的问题是,是否存在这种差异的原因,例如在加密/解密时遗漏了 IV 或滥用了 PHP mcrypt_decrypt 函数?

【问题讨论】:

    标签: php encryption cryptography mcrypt


    【解决方案1】:

    这很可能是 libmcrypt 的 cast-256 模块中的一个错误,您链接的站点似乎受到了它的影响。

    我得到的输出与你在本地机器上的输出相同,RFC2612 测试向量也传递给我,所以不用担心 - 这不是你的错误,也不是你的错误。

    但是我不得不说,如果不使用 IV 和正确的加密密钥(“测试”不是正确的密钥),您永远不应该进行加密。您还应该使用更成熟的算法,例如 AES。

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 2015-09-21
      • 2014-01-29
      • 2013-06-06
      • 2014-08-17
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2014-02-06
      相关资源
      最近更新 更多