我试图使用CAST256和CBC通过mcrypt_encrypt函数加密字符串。我使用键test和输入test,它生成以下代码:
mcrypt_encrypt(MCRYPT_CAST_256, 'test', 'test', MCRYPT_MODE_CBC);它的base64编码版本产生(在PHP5.5.12版本上):
DaypOCFVfoI8ghemj0ZkEg==但是,我将输出与工具/加密/上的工具进行比较,输出有很大不同;使用上述密码、模式、密钥和数据的站点输出如下:
eIKnQGAhjsGh+11XZsA2Lg==使用相反的工具解密每个字符串(即用PHP解密的站点输出和通过站点解密的PHP输出)提供以下输出:
DUCD000000000000 (site output)
DUCD000000000000 (PHP output)但是,使用与字符串相同的介质解密会给出输入数据('test')。
我的问题是,是否存在这种差异的原因,例如在加密/解密时遗漏了IV,或者滥用了PHP mcrypt_decrypt函数?。
发布于 2015-05-13 18:03:55
这很可能是libmcrypt的cast-256模块中的一个bug,您所链接的站点似乎受到了它的影响。
我得到的输出与您在本地机器上的输出相同,RFC2612测试向量也通过我的测试向量,所以不要担心--这对您来说不是一个错误,也不是在您的端部出现故障。
但是,我不得不说,如果不使用IV和正确的加密密钥('test‘不是正确的密钥),就不应该加密。您还应该使用更成熟的算法,比如AES。
https://stackoverflow.com/questions/29584267
复制相似问题