对称加密
对称加密算法,加解密都用同一个密钥。
node:
let crypto = require('crypto')
// data:需要加解密的内容,
// key: 密钥
// 初始化向量(iv)
function aesEncrypt(data, key, iv) {
// 给定的算法,密钥和初始化向量(iv)创建并返回Cipher对象
const cipher = crypto.createCipheriv('aes-192-cbc', key, iv)
// Key length is dependent on the algorithm. In this case for aes192, it is 24 bytes (192 bits).
// 指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
// 数据的编码 utf8 返回值的编码 hex
var crypted = cipher.update(data, 'utf8', 'hex')
crypted += cipher.final('hex')
return crypted
}
function aesDecrypt(data, key, iv) {
// 给定的算法,密钥和初始化向量(iv)创建并返回Cipher对象
const decipher = crypto.createDecipheriv('aes-192-cbc', key, iv)
// 数据的编码 hex 返回值的编码 utf8
var decrypted = decipher.update(data, 'hex', 'utf8')
decrypted += decipher.final('utf8')
return decrypted
}
const IV = 'f710b45f04e37709' // 初始化向量(iv)
let data = 'luoxiaobu' // 需要加解密的内容,
let key = '123456789987654321123456' // 24 位秘钥密钥
let encryptData = aesEncrypt(data, key, IV)
let decryptData = aesDecrypt(encryptData, key, IV)
console.log(encryptData)
console.log(decryptData)
复制代码
输出:
b98a1d87ea00fb47ade2d9cff0a9179d
luoxiaobu
复制代码
crypto-js:
const CryptoJS = require('crypto-js')
const IV = CryptoJS.enc.Utf8.parse('f710b45f04e37709') // 十六位十六进制数作为密钥偏移量
let data = 'luoxiaobu' // 需要加解密的内容,
let key = CryptoJS.enc.Utf8.parse('123456789987654321123456') // 24 位秘钥密钥
function decrypt(data, key, iv) {
let dataHexStr = CryptoJS.enc.Hex.parse(data);
let dataBase64 = CryptoJS.enc.Base64.stringify(dataHexStr);
// 接收的数据是 base64
let decrypt = CryptoJS.AES.decrypt(dataBase64, key, { iv: iv, mode: CryptoJS.mode.CBC});
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
//加密方法
function encrypt(data, key, iv) {
let encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC});
return encrypted.ciphertext.toString().toUpperCase();;
}
let encryptData = encrypt(data, key, IV)
let decryptData = decrypt(encryptData, key, IV)
console.log(encryptData)
console.log(decryptData)
复制代码
输出:
b98a1d87ea00fb47ade2d9cff0a9179d
luoxiaobu
复制代码
补充:
AES是一种常用的对称加密算法。加密的分组模式有ECB/CBC/CFB/OFB
分组密码又称为秘密钥密码或对称密码。利用分组密码对明文进行加密时,首先需要对明文进行分组,每组的长度都相同,然后对每组明文分别加密得到等长的密文,分组密码的特点是加密密钥与解密密钥相同。 分组密码的安全性应该主要依赖于密钥,而不依赖于对加密算法和解密算法的保密。因此,分组密码的加密和解密算法可以公开。
node cropty Cipher 类 ,node cropty Decipher类 具体使用参考文档
参考博主 https://juejin.cn/post/6844904013054345223
标签:vue,crypto,iv,let,密钥,key,CryptoJS,js,data From: https://www.cnblogs.com/luoguixin/p/17029745.html