我在应用程序中定义了以下类:
@Entity
@Table(name = "SETTINGS")
public class Settings {
@Id
public int id;
private String sharedSecret;
@Transient
private SecretKey key;
public SecretKey getKey() {
return key;
}
public void genKey() throws NoSuchAlgorithmException {
key = KeyGenerator.getInstance("AES").generateKey();
sharedSecret = Base64.toBase64String(key.getEncoded());
}
@PostLoad
private void init() {
byte[] encodedKey = Base64.decode(sharedSecret);
key = new SecretKeySpec(encodedKey,0,encodedKey.length,"AES");
}
}
我正在使用javax.security和BouncyCastle包。我们的想法是使用JPA,应用程序将Base64编码的字符串保存到应用程序的数据库中,然后在需要时使用该持久值来重新创建密钥。但是,当我执行解密时,我遇到了一个错误,即
com.nimbusds.jose.JOSEException:无法验证GCM身份验证 tag:mac检查GCM失败
我所做的研究似乎表明从数据库读取的密钥不是相同的持久值,但我不确定我还能做些什么来正确编码和解码密钥。
答案 0 :(得分:0)
这个问题与课程无关,而是与密文的阅读方式有关。