aes 對稱 加密 / 解密
公司項(xiàng)目敏感數(shù)據(jù)較多锅纺,決定前后端進(jìn)行接口加密處理映皆,采用的是 AES + BASE64 算法加密~
AES加密簡單介紹
高級加密標(biāo)準(zhǔn)(AES,Advanced Encryption Standard)為最常見的對稱加密算法(微信小程序加密傳輸就是用這個(gè)加密算法的)。對稱加密算法也就是加密和解密用相同的密鑰,具體的加密流程如下圖:
image.png
實(shí)現(xiàn)
首先簡單介紹一下 Crypto-js
crypto-js 是一個(gè)純 javascript 寫的加密算法類庫 隔崎,可以非常方便地在 javascript 進(jìn)行 MD5轿曙、SHA1弄捕、SHA2、SHA3导帝、RIPEMD-160 哈希散列守谓,進(jìn)行 AES、DES您单、Rabbit斋荞、RC4、Triple DES 加解密 GitHub
采用 npm 進(jìn)行下載安裝
npm install crypto-js --save
下面我們來定義兩個(gè)函數(shù)虐秦,分別是加密和解密
const AES = require('crypto-js');
const key = AES.enc.Utf8.parse('0123456789ASDFGH'); //十六位十六進(jìn)制數(shù)作為密鑰
const iv = AES.enc.Utf8.parse('ASDFGH0123456789'); //十六位十六進(jìn)制數(shù)作為密鑰偏移量
// 加密
export function encrypt(word) {
const src = AES.enc.Utf8.parse(word);
const encrypted = AES.AES.encrypt(src, key, { iv, mode: AES.mode.CBC, padding: AES.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
};
// 解密
export function decrypt(word) {
const encryptedHexStr = AES.enc.Hex.parse(word);
const src = AES.enc.Base64.stringify(encryptedHexStr);
const decrypt = AES.AES.decrypt(src, key, { iv, mode: AES.mode.CBC, padding: AES.pad.Pkcs7 });
const decryptedStr = decrypt.toString(AES.enc.Utf8);
return decryptedStr.toString();
}
注意密鑰的長度由對稱解密使用的算法是 AES-128-CBC
算法平酿,數(shù)據(jù)采用 PKCS#7
填充 , 因此這里的 key
需要為16位悦陋!
我們通過 export default
暴漏出去 解密 decrypt
和 加密 encrypt
兩個(gè)函數(shù) 方便在需要的時(shí)候進(jìn)行引入并傳入?yún)?shù)調(diào)用即可