【发布时间】:2018-11-12 19:01:28
【问题描述】:
我在 nodejs 中实现了一组基本的加密/解密函数,我在解密部分不断收到以下错误:Error: Unsupported state or unable to authenticate data
这是我目前的代码:
import crypto from 'crypto'
import logger from './logger'
const ALGORITHM = 'aes-256-gcm'
export const encrypt = (keyBuffer, dataBuffer, aadBuffer) => {
// iv stands for "initialization vector"
const iv = Buffer.from(crypto.randomBytes(12), 'utf8')
logger.debug('iv: ', iv)
const encryptor = crypto.createCipheriv(ALGORITHM, keyBuffer, iv)
logger.debug('encryptor: ', encryptor)
logger.debug('dataBuffer: ', dataBuffer)
return Buffer.concat([iv, encryptor.update(dataBuffer, 'utf8'), encryptor.final()])
}
export const decrypt = (keyBuffer, dataBuffer, aadBuffer) => {
const iv = dataBuffer.slice(0, 96)
const decryptor = crypto.createDecipheriv(ALGORITHM, keyBuffer, iv)
return Buffer.concat([decryptor.update(dataBuffer.slice(96), 'utf8'), decryptor.final()])
}
我的错误发生在解密函数的最后一行。我将 iv 存储为 dataBuffer 的一部分。
提前致谢!
【问题讨论】:
-
我可能错了,但是切片不是指定字节数(不是位)吗?如果是这种情况,那么您应该切片 12 个字节,而不是 96 个。
标签: encryption aes node.js