我收到这个错误消息:Error: Unsupported state or unable to authenticate data
当试图解密后端发送的前端信息时。
这是我的后台代码:
const userInfo = await this.permsRepository.find({
where: {
email: email,
},
});
// Generate initialization vector
const iv = randomBytes(16);
// Get secret key
const key = process.env.USERSECRET;
// Encryption settings
const cipher = createCipheriv('aes-256-gcm', Buffer.from(key), iv);
// Encrypt
const stringUserInfo = JSON.stringify(userInfo);
let encryptedUserInfo = cipher.update(stringUserInfo, 'utf-8', 'hex');
encryptedUserInfo += cipher.final('hex');
const tag = cipher.getAuthTag().toString('hex');
return {
iv: iv.toString('hex'),
data: encryptedUserInfo,
tag: tag
}
这是我在前端尝试解密的方式:
const iv = Buffer.from(`${encryptJson.iv}`, 'hex');
const encryptedInfo = Buffer.from(`${encryptJson.data}`, 'hex');
// Get secret key
const key = process.env.USERSECRET;
// Configure decipher
const decipher = crypto.createDecipheriv('aes-256-gcm', Buffer.from(key), Buffer.from(iv));
decipher.setAuthTag(Buffer.from(`${encryptJson.tag}`, 'hex'));
try {
let decrypted = decipher.update(encryptedInfo, 'hex', 'utf-8');
decrypted += decipher.final('utf-8');
console.log(decrypted.toString());
我一直在寻找类似的问题,但似乎他们的所有问题都通过在他们的密码和解密中添加authTags来解决,我已经在我的加密和解密函数中使用了这一点。
我仍然得到那个错误,特别是在decipher.final()
被附加到decrypted
对象的那一行。
1条答案
按热度按时间uqzxnwby1#
我无法直接使用
crypto
库解决这个问题,所以我开始研究可能的替代方案。我最终在前端和后端都使用了
crypto-js
的AES。使用它包含的方法加密和解密解决了我遇到的问题。我不确定是什么原因导致了环境差异。