Datapower密文CBC算法解密值由java中的输入字符和不需要的字符组成

Datapower encrypted text Decrypted value of CBC algorithm consists of input and unwanted characters in java

我正在尝试使用以下代码从 Java 中的数据电源中解密加密文本。我正在使用对称密钥机制。下面的代码能够解密数据,但给了我一个包含不需要字符的数据 f 后面跟着纯文本。我尝试对 16 个字符的响应进行子字符串化,但我发现并非所有解密的文本都具有相同的不需要的字符。你能帮我解决这个问题吗?感谢您的回复。


public String decrypt(String encryptedText, String basekey){

byte[] encryptedTextByte = DatatypeConverter.parseBase64Binary(encrypted text);

byte[] key = Base64.getDecoder().decode(base64Key.getBytes());

byte[] IV = new byte[16];

IvParameterSpec ivSpec = new IvParameterSpec(iv);

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

 SecretKeySpec secret = new SecretKeySpec(key, "AES");

cipher.init(Cipher.DECRYPT_MODE, secret, ivSpec);

return new String(cipher.doFinal(encryptedTextByte));

}

datapower 中的加密逻辑

<xsl:variable name="ciphertext">
  <xsl:value-of select="dp:encrypt-data($algorithm,$session-key,$node)"/>
</xsl:variable>

我找到了解决方案,正在使用 16 的子字符串删除填充。但理想情况下我应该删除字节。因此,在转换为 String 之前,我将删除多余的字节,然后将其转换为 String。所以,我只有纯文本。

public String decrypt(String encryptedText, String basekey){

byte[] encryptedTextByte = DatatypeConverter.parseBase64Binary(encrypted text);

byte[] key = Base64.getDecoder().decode(base64Key.getBytes());

byte[] IV = new byte[16];

IvParameterSpec ivSpec = new IvParameterSpec(iv);

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

 SecretKeySpec secret = new SecretKeySpec(key, "AES");

cipher.init(Cipher.DECRYPT_MODE, secret, ivSpec);

byte[] decryptedBytes = cipher.doFinal(encryptedTextByte);

// Removing extra characters here

byte[] plainBytes = Arrays.copyOfRange(decryptedBytes, 16, decryptedBytes.length);

return new String(plainBytes);

}