我正在使用mcrypt函数使用TripleDES加密文本块。 90%的时间它应该工作,我可以解密就好了。另外10%虽然我根本无法解密 - 好像我有错误的密钥或数据被破坏。
功能如下:
function enc($text, $key, $iv) {
$text_num = str_split($text, 8);
$text_num = 8 - strlen($text_num[count($text_num)-1]);
for ($i=0; $i < $text_num; $i++) {
$text = $text . chr($text_num);
}
$cipher = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'cbc', '');
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mcrypt_generic($cipher, $text);
mcrypt_generic_deinit($cipher);
return base64_encode($decrypted);
}
他们的关键&amp; IV是正确的长度(分别为24/8)并且永远不会改变。就像我说的,它在所有内容上运行 exact 相同的代码,但只有10%以这种方式失败。
我可以在$text
中传递任何导致此问题的内容吗?它不喜欢某些字符集吗?或者这可能是由于内存不足/某些其他服务器状况而发生的?
任何帮助固定这一点将非常感激。谢谢!
答案 0 :(得分:0)
(复制自评论)3DES有64位块大小(8字节)。您需要查看明文的确切大小,以便根据块数进行检查。请查看文档中提到的填充,可能是PKCS5或可能是PKCS7。您的“10%”失败实际上是12.5%失败(8分之1)?这往往会指向与阻止有关的事情。