コードに従う必要があり、私が知る限りそれは正しいですが、機能しません。PHP の Mcrpyt でデータをエンコードしてから、openssl コマンドライン ツールでデコードしようとしています。
これは私のPHPコードです:
/*
* Convert a normal ascii string to a hexadecimal string.
* Complement of hexToString().
*/
function stringToHex($str)
{
$hex_str = "";
for ($i = 0; $i < strlen($str); ++$i)
{
$hex_str .= sprintf("%02X", ord($str[$i]));
}
return $hex_str;
}
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
$block_size = mcrypt_get_block_size("rijndael-128", "cbc");
$pad = $block_size - (strlen($data) % $block_size);
$data .= str_repeat(chr($pad), $pad);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "1234567812345678", $data, MCRYPT_MODE_CBC, $iv);
$message = stringToHex($iv) . base64_encode($encrypted);
エンコードされたメッセージに IV を追加します。たとえば、IV が 000000000000000000000000000000 (サイズは 32) の場合、次のコマンドを使用して復号化します。
openssl enc -d -aes-128-cbc -A -nosalt -K 31323334353637383132333435363738 -iv 00000000000000000000000000000000 -in file_in > file_out
また、1234567812345678 は 16 進数であり、31323334353637383132333435363738 であることに注意してください。
不正な復号化 1340:エラー:0606506D:デジタル エンベロープ ルーチン:EVP_DecryptFinal_ex:間違った最終ブロック長:./crypto/evp/evp_enc.c:454:
誰?
前もって感謝します、すべての愛、ジョリ。