これは私が持っているPHPコードです。それは基本的に何
PHPコードの3DES解読に相当するJavaを必要としています
function decrypt($s_input, $s_key, $s_iv) {
$s_decrypted = pack("H*" , $s_input); // Hex to binary
$s_decrypted = mcrypt_decrypt (MCRYPT_3DES, $s_key, $s_decrypted, MCRYPT_MODE_CBC, $s_iv); // 3des decryption
return $s_decrypted;
}
echo encrypt('c37551bb77f741d0bcdc16497b4f97b1','123456781234567812345678','12345678');
は、3DES暗号化された文字列復号化することである(最初に、パック機能を使用してバイナリする16進文字列に変換し、その後、実際の復号を行います)。
これはPHP-4で完全に機能し、 "Hello World"メッセージを出力します。
しかし、同等のJavaコード(jdk 1.6)を実行すると、 - ¬ªmjV=7xl_ÓÄ^> *?というガベージ出力が表示されます。
誰かがこの問題のトラブルシューティングを支援できますか? Javaが16進文字列を適切に解読しない理由
private static String decrypt(String inputStr, String keyStr, String ivStr) throws Exception {
IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
SecretKeySpec key = new SecretKeySpec(keyStr.getBytes(), "DESede");
inputStr = hexToString(inputStr, 2);
Cipher cipher = Cipher.getInstance("DESede/CBC/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, iv);
byte[] decrypted = cipher.doFinal(inputStr.getBytes());
return new String(decrypted);
}
private static String hexToString(String input, int groupLength) {
StringBuilder sb = new StringBuilder(input.length()/groupLength);
for (int i = 0; i < input.length() - groupLength + 1; i += groupLength) {
String hex = input.substring(i, i + groupLength);
sb.append((char) Integer.parseInt(hex, 16));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
String decryptSignature = decrypt("c37551bb77f741d0bcdc16497b4f97b1", "123456781234567812345678", "12345678");
System.out.println(decryptSignature);
}
ありがとうございました。あなたが与えたコードは、問題を解決しました! – user1289117