PHPで3des文字列をデコードする必要がありますが、これまで解読した経験がありません...
最初のステップは、デコードするキーと文字列のセットを取得することです - 私はすでにそれを持っています。
アルゴリズムに関する次の情報があります。
タイプ: CBC、パディング - PKCS5、初期化ベクトル (iv?) - 8 つのゼロの配列
私はこの方法を試します:
// very simple ASCII key and IV
$key = "passwordDR0wSS@P6660juht";
$iv = "password";
//$iv = array('0','0','0','0','0','0','0','0');
//$iv = "00000000";
$cipher = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
//$iv = mcrypt_enc_get_iv_size($cipher);
// DECRYPTING
echo "<b>String to decrypt:</b><br />51196a80db5c51b8523220383de600fd116a947e00500d6b9101ed820d29f198c705000791c07ecc1e090213c688a4c7a421eae9c534b5eff91794ee079b15ecb862a22581c246e15333179302a7664d4be2e2384dc49dace30eba36546793be<br /><br />";
echo "<b>Decrypted 3des string:</b><br /> ".SimpleTripleDesDecrypt('51196a80db5c51b8523220383de600fd116a947e00500d6b9101ed820d29f198c705000791c07ecc1e090213c688a4c7a421eae9c534b5eff91794ee079b15ecb862a22581c246e15333179302a7664d4be2e2384dc49dace30eba36546793be')."<br />";
function SimpleTripleDesDecrypt($buffer) {
global $key, $iv, $cipher;
mcrypt_generic_init($cipher, $key, $iv);
$result = rtrim(mdecrypt_generic($cipher, hex2bin($buffer)), "\0");
mcrypt_generic_deinit($cipher);
return $result;
}
function hex2bin($data)
{
$len = strlen($data);
return pack("H" . $len, $data);
}
最初にサンプル データが表示され、このデータ コードでは正常に動作します。SOAP Web サービスによってデータベースから取得した独自のデータを使用しようとすると、問題が発生します。次のエラーが表示されます。
警告: pack() [function.pack]: タイプ H: 不正な 16 進数が....
スクリプトでさまざまな種類のコーディングを試みたにもかかわらず、これを取得しました。スクリプト ファイル自体は ANCI にあります。
また、コメントでわかるように、私もIVでいくつかの実験を行いましたが、最初の問題に対処しないと意味がありません。
もう1つはパディング== PKCS5です。それを使用する必要がありますか?私の場合はどのようにすればよいですか?
これについて助けていただければ幸いです。