Javaで暗号化された文字列をPHPで復号化するにはどうすればよいですか?
<p>次のコードを使用して、JAVA で暗号化された文字列を復号化しようとしています。 </p>
<pre class="lang-java prettyprint-override"><code>SecretKey SecretKey = new SecretKeySpec(build3DesKey(key), "DESede");
暗号 cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.DECRYPT_MODE, SecretKey);
byte[] b = cipher.doFinal(str2ByteArray(dest));
文字列デコーダ = new String(b, "utf-8");
</code></pre>
<pre class="lang-java prettyprint-override"><code>private static byte[] build3DesKey(String keyStr) throws Exception {
byte[] キー = 新しいバイト[24];
byte[] temp = keyStr.getBytes("utf-8");
if (key.length > temp.length) {
System.arraycopy(temp, 0, key, 0, temp.length);
} それ以外 {
System.arraycopy(temp, 0, key, 0, key.length);
}
リターンキー;
}
</code></pre>
<p>PHP バージョンで同じ結果を得るにはどうすればよいですか? PHPで書いてみましたが、出力が間違っていました。 </p>
<pre class="brush:php;toolbar:false;">$data = '69C16E8142F2BDDE7569842BB0D68A3176624264E...';
$key = 'rpwdvbppnrvr56m123 #';
関数復号化($data, $secret)
{
//ハッシュからキーを生成
$key = md5(utf8_encode($secret), true);
//$key の最初の 8 バイトを $key の最後に追加します。
$key .= substr($key, 0, 8);
$data = Base64_decode($data);
$data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');
$block = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = ord($data[$len-1]);
return substr($data, 0, strlen($data) - $pad);
}
var_dump(utf8_encode(Decrypt($data, $key)));</pre></p>