简体   繁体   English

如何将 openssl_decrypt 用作 JAVA?

[英]How can I use openssl_decrypt as a JAVA?

I would like to know that How can I use openssl_decrypt in JAVA?我想知道如何在 JAVA 中使用 openssl_decrypt?

Here is PHP code这是 PHP 代码

<?php
    $textToDecrypt = hex2bin("db3700cd861aee8215b3db514adde6c9"); // input is hexadecimal format
    $key = "MbQeThWmZq4t7w1z";
    $decrypted = openssl_decrypt($textToDecrypt, 'AES-128-CBC', $aesKey, OPENSSL_NO_PADDING);
    echo "decrypt data is ". $decrypted
?>

And here is my JAVA code这是我的 JAVA 代码

byte[] textToDecrypt = inp.getBytes();

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);


byte[] original = cipher.doFinal(textToDecrypt);

result = new String((original));

The PHP code can decrypt correctly but in JAVA I got the error " Parameters missing " PHP 代码可以正确解密,但在 JAVA 中出现错误“缺少参数

How can I solve this.我该如何解决这个问题。

Thanks.谢谢。

The PHP code implicitly uses a zero IV, which must be explicitly set in the Java code. PHP 代码隐式使用零 IV,必须在 Java 代码中明确设置。 In addition, in the Java Code the ciphertext must be hex decoded, eg:另外,在 Java 代码中,密文必须经过十六进制解码,例如:

byte[] textToDecrypt = hexStringToByteArray("db3700cd861aee8215b3db514adde6c9");

SecretKeySpec secretKeySpec = new SecretKeySpec("MbQeThWmZq4t7w1z".getBytes(StandardCharsets.UTF_8), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(new byte[16]));

byte[] original = cipher.doFinal(textToDecrypt);
String result = new String(original, StandardCharsets.UTF_8);
System.out.println(result); // hellotest

where hexStringToByteArray() is from here . hexStringToByteArray()来自这里

Please note that a static IV is insecure.请注意,static IV 是不安全的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM