次のようなコードで対称復号化を使用しようとしています。
$encrypted = base64_decode($encryptedBase64String);
$returnText = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, key, $encrypted, MCRYPT_MODE_CBC, iv);
そして、私は奇妙な結果に遭遇します(誰も質問しなかったように)。mcrypt_decrypt
パディングされた文字の数に等しいバイト値で満たされたパディングでメソッドが復号化されたテキストを返す理由がわかりません。PHPマニュアルによると、メソッドはその戻り値をゼロ値のバイトで埋める必要があります。
それを明確にするために、以下に 2 つの例を示します。
[上記の pad の呼び出しはmcrypt_decrypt
、長さ 32 の文字列を返します]
例 1
プレーンテキスト = 'テキスト'
「テキスト」の長さは 4 であるため、パディングのサイズは 28 文字 (32 - 4) です。
したがって、次のように returnText を受け取ります。
{\116\101\120\116\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28\28}
例 2
「12345678901234567890」
長さ = 20
{\49\50\51\52\53\54\55\56\57\48\49\50\51\52\53\54\55\56\57\48\12\12\12\12\12\12\12\12\12\12\12\12}
変更するにはどうすればよいですか?パディングはnullではないため、メソッド rtrim("\0") でパディングを削除すると問題が発生します。