如何在 JavaScript 中使用 AES(高级加密标准)实现加密和解密。
为什么是 AES(高级加密标准)?
安全性:与其他提交的密码相比,竞争算法将根据它们抵抗攻击的能力来判断,尽管安全强度被认为是竞争中最重要的因素。
成本:打算在全球、非排他性和免版税的基础上发布,候选算法将在计算和内存效率方面进行评估。
我正在 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 …Run Code Online (Sandbox Code Playgroud)