PHP CAST-256 mcrypt 输出不同

PHP CAST-256 mcrypt output differs

我正在尝试通过 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')。

我的问题是,这种差异是否有原因,例如 encrypting/decrypting 时遗漏了 IV 或 PHP mcrypt_decrypt 函数的误用?

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

我得到的输出与您在本地机器上的输出相同,RFC2612 测试向量也在我的机器上通过,所以别担心 - 这不是您的错误,也没有损坏你的结局。

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