gpt4 book ai didi

java - 如何保证加密数据能够被正确解密?

转载 作者:行者123 更新时间:2023-12-01 09:47:07 35 4
gpt4 key购买 nike

我需要通过 REST 发送一些加密数据。我的加密器/解密器类如下:

public class AesCrypter {
static String IV = "AAAAAAAAAAAAAAAA";
static String aesKey = "0123456789abcdef";

public static byte[] encrypt(String unecryptedText) throws Exception {
Cipher encrypt = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(aesKey.getBytes("UTF-8"), "AES");
encrypt.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return encrypt.doFinal(unecryptedText.getBytes("UTF-8"));
}

public static String decrypt(String cryptedText) throws Exception{
byte[] bytes = cryptedText.getBytes(StandardCharsets.UTF_8);
Cipher decrypt = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(aesKey.getBytes("UTF-8"), "AES");
decrypt.init(Cipher.DECRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return new String(decrypt.doFinal(bytes),"UTF-8"); // this line
}
}

但是我在解密方法上收到 javax.crypto.BadPaddingException: 鉴于最终 block 未正确填充,控制台指出错误位于我用 //注释的行上这一行

我在这里错过了什么?

最佳答案

Actual Scenerio of PKCS5-Padding causes javax.crypto.BadPaddingException

如果您尝试使用错误的 key 解密 PKCS5 填充的数据,然后取消填充它(这是由 Cipher 类自动完成的),您很可能会得到 BadPaddingException(可能略小于 255/256,大约 99.61%),因为填充具有特殊的结构,该结构在取消填充期间进行验证,并且很少有键会产生有效的填充。

因此,如果您遇到此异常,请捕获它并将其视为“错误 key ”。

当您提供错误的密码,然后使用该密码从 keystore 获取 key 或使用 key 生成函数将其转换为 key 时,也可能会发生这种情况。

当然,如果数据在传输过程中损坏,也可能会发生错误的填充。

所以你可以遵循Base64:

import org.apache.commons.codec.binary.Base64;


public static String base64Encode(String token) {
byte[] encodedBytes = Base64.encode(token.getBytes());
return new String(encodedBytes, Charset.forName("UTF-8"));
}


public static String base64Decode(String token) {
byte[] decodedBytes = Base64.decode(token.getBytes());
return new String(decodedBytes, Charset.forName("UTF-8"));
}

资源链接:

  1. Base64 Encoding in Java

关于java - 如何保证加密数据能够被正确解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37898824/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com