如何解决线程“main”中的异常 javax.crypto.AEADBadTagException:标签不匹配
我正在尝试使用 GCM 解密密码,但遇到 TAG 不匹配的异常。之前我们使用 CBC 来解密和它的工作。
public static String getDcryptedGCMPassword(String password,String secretKey) {
try {
byte[] cipherData = Base64.getDecoder().decode(password);
byte[] saltData = Arrays.copyOfRange(cipherData,8,16);
MessageDigest md5 = MessageDigest.getInstance("MD5");
final byte[][] keyAndIV = GenerateKeyAndIV(32,16,1,saltData,secretKey.getBytes(StandardCharsets.UTF_8),md5);
SecretKeySpec key = new SecretKeySpec(keyAndIV[0],"AES");
if (cipherData.length < 12 + 16) throw new IllegalArgumentException();
GCMParameterSpec params = new GCMParameterSpec(128,keyAndIV[1],keyAndIV[1].length);
Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE,key,params);
byte[] decryptData = cipher.doFinal(cipherData);
String decript = new String(decryptData,StandardCharsets.UTF_8);
return decript;
} catch (Exception e) {
log.error("AESGCM256 decrypted text processing failed,error: {}",e);
return null;
}
}
例外是:
Exception in thread "main" javax.crypto.AEADBadTagException: Tag mismatch!
at com.sun.crypto.provider.GaloisCounterMode.decryptFinal(GaloisCounterMode.java:578)
at com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1116)
at com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1053)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at javax.crypto.Cipher.doFinal(Cipher.java:2164)
at com.hp.lh.reports.util.EncryptorAESGCM.decrypt(EncryptorAESGCM.java:74)
at com.hp.lh.reports.util.EncryptorAESGCM.decryptWithPrefixIVNew(EncryptorAESGCM.java:112)
at com.hp.lh.reports.util.EncryptorAESGCM.main(EncryptorAESGCM.java:209)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。