PHP CAST-256 mcrypt输出不同

时间:2015-04-11 23:33:18

标签: php encryption cryptography mcrypt

我试图通过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函数?

1 个答案:

答案 0 :(得分:1)

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

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

但我必须说,如果不使用IV和正确的加密密钥(' test'不是正确的密钥),就不应加密。您还应该使用更加成熟的算法,如AES。