java - 线程“主”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], 0, 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)
解决方案
推荐阅读
- rethinkdb - rethinkdb-migrate 迁移文件的位置
- r - 来自 bam {mgcv} 的人口水平预测
- xamarin.forms - 运行 UWP 项目时出错 (UniversalWindows)
- php - 我们必须在构造函数中声明所有属性吗?
- android - 空指针异常,改造?
- firebase - 在 Flutter App 上更新 FCM Token
- vba - VBA | 寻找代码以在 PowerPoint 中自动编号“第 x 页,共 xx 页”,而不是为隐藏的幻灯片编号
- sql - SQL Server 代理作业空闲 - 持续时间仍在增加
- php - Debian 8中的PHP安装错误
- html - 从控制器显示数据以查看