2
我正在使用mcrypt函数来使用TripleDES加密一段文本。 90%的时间,因为它应该和我可以解密就好。另外10%,尽管我根本无法解密 - 就好像我的密钥错误或数据被破坏了一样。什么可能导致PHP mcrypt破坏数据?
功能如下:
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);
}
它们键& IV是正确的长度(24/8分别地)和永远不会改变。就像我说的那样,它在所有内容上运行确切的相同的代码,但只有10%以这种方式失败。
有什么我可以传递$text
导致此?它不喜欢某些字符集吗?或者这可能是由于内存不足/其他服务器的情况?
任何牵制下来的帮助将非常感激。谢谢!
失败的明文有多久?它们是否始终小于一个街区或多于一个街区?他们究竟是多块?你的代码没有指定填充。 – rossum
明文大概是1500个字符+/- 300.填充我不太确定 - 在它传递到此函数之前没有完成,所以我猜想没有任何执行。我继承了这些代码,并且没有加密技术,我不知道该怎么改变。 –
为什么它会做'$ text'的所有内容?它看起来像试图填充它,但这不是必需的。如果只删除函数的前6行(例如:从'$ text_num = str ...'到for循环的结尾),会发生什么? – NullUserException