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);
}
我正在尝试使用以下代码从 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);
}