【发布时间】:2023-04-06 10:00:02
【问题描述】:
按照以下逻辑进行解密时出现异常。请在下面的代码 sn-p 中向我提出任何问题。加密很好,可以加密。
public String encryptDataSymmetric(String dataTobeEncrypted) {
String encryptedData = null;
try {
Charset CHARSET = Charset.forName("UTF8");
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
SecureRandom securerandom = new SecureRandom();
KeyGenerator keygenerator = KeyGenerator.getInstance("AES");
keygenerator.init(192, securerandom);
SecretKey key = keygenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
// cipher.init(Cipher.ENCRYPT_MODE, key, ivspec);
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(new byte[cipher.getBlockSize()]));
encryptedData = DatatypeConverter.printBase64Binary(cipher.doFinal(dataTobeEncrypted.getBytes(CHARSET)))
.trim();
System.out.println("---encryptedData-----" + encryptedData);
} catch (Exception ex) {
ex.printStackTrace();
}
return encryptedData;
}
public String decryptDataSymmetric(String dataTobeDecrypted) {
String decryptedData = null;
try {
Charset CHARSET = Charset.forName("UTF8");
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
SecureRandom securerandom = new SecureRandom();
KeyGenerator keygenerator = KeyGenerator.getInstance("AES");
keygenerator.init(192, securerandom);
SecretKey key = keygenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[cipher.getBlockSize()]));
decryptedData = new String(
DatatypeConverter.parseBase64Binary(new String(cipher.doFinal(dataTobeDecrypted.getBytes()))));
System.out.println("---decryptedData----" + decryptedData);
} catch (Exception ex) {
ex.printStackTrace();
}
return decryptedData;
}
javax.crypto.BadPaddingException:垫块损坏 org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(未知 来源)
【问题讨论】:
-
解密时不要再生成新的密钥,需要使用加密函数中使用的那个。
标签: java exception encryption symmetric