Web サービスからのすべてのデータがトリプル DES 暗号化を使用して暗号化されるプロジェクトに取り組んでいます。私の特定のケースでは、暗号化された URL からクエリ文字列を受信しています。Web サービス プロバイダーは、暗号化 Key_192 と初期化ベクター IV_192 という 2 つの復号化用の値を提供してくれました。これらのキーの長さは両方とも 24 文字です。
PHP で受け取ったクエリ文字列を復号化しようとすると、mcrypt ライブラリを使用しています。一般的な復号化メソッドを初期化するとき、私の機能の一部は次のとおりです。
$key = "XXXXXXXXXXXXXXXXXXXXXXXX";
$iv = "YYYYYYYYYYYYYYYYYYYYYYYY";
$cipher = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
mcrypt_generic_init($cipher, $key, $iv);
$result = rtrim(mdecrypt_generic($cipher, $this->hex2bin($buffer)), "\0");
mcrypt_generic_deinit($cipher);
return $result;`
ただし、コードのその部分を実行すると、次のメッセージが表示されます。
mcrypt_generic_init(): Iv size incorrect; supplied length: 24, needed: 8
Web サービス プロバイダーは、エラーに関するガイダンスを提供できませんでした。代わりに、次のような行を持つ VB.NET 実装に誘導しました。
Dim cs As CryptoStream = New CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_192, IV_192), CryptoStreamMode.Read)
mcrypt_generic_init() 関数と同様に、2 つのキーを直接渡します。
IV サイズが暗号方式 (Triple DES) に依存することは理解していますが、関数がサポートしているように見えるよりも長い IV を持っている理由について混乱しています。それはどうしてですか?この種の暗号化に関する私の経験は限られており、クエリ文字列をランダムな文字のフィールドのように見えないものに復号化することはできませんでした.