繁体   English   中英

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

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

我正在尝试使用以下代码从 Java 中的数据电源中解密加密文本。 我正在使用对称密钥机制。 下面的代码能够解密数据,但给我一个带有不需要字符的数据,后跟纯文本。 我尝试 substring 响应 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 的 substring 来删除填充。 但理想情况下,我应该删除字节。 因此,在转换为字符串之前,我将删除多余的字节,然后将其转换为字符串。 所以,我只有纯文本。

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);

}

暂无
暂无

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

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