TripleDESを使用してテキストのブロックを暗号化するためにmcrypt関数を使用しています。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);
}
キーとIVは正しい長さ(それぞれ24/8)であり、変更されることはありません。私が言ったように、それはすべてでまったく同じコードを実行しますが、この方法で失敗するのはわずか10%です。
$textこれを引き起こしている私が渡すことができる何かがありますか?特定の文字セットが好きではありませんか?または、これはメモリ不足/その他のサーバーの状態が原因で発生する可能性がありますか?
これを特定するための助けをいただければ幸いです。ありがとう!