我试图通过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函数?
答案 0 :(得分:1)
这很可能是libmcrypt的cast-256模块中的错误,而且您链接的网站似乎受其影响。
我得到的输出与您在本地机器上的输出相同,RFC2612测试向量也传递给我,所以不要担心 - 这不是你的错误,也不是你最终会被打破。
但我必须说,如果不使用IV和正确的加密密钥(' test'不是正确的密钥),就不应加密。您还应该使用更加成熟的算法,如AES。