AES加解密技術棧:crypto-js
在實際開發項目當中,前後端為了代碼安全進行加密處理,先整理下aes加密。
aes加密是基于資料塊的加密方式,也就是說,每次處理的資料時一塊(16位元組),當資料不是16位元組的倍數時填充,這就是所謂的分組密碼(差別于基于比特位的流密碼),16位元組是分組長度
而aes加密又存在分組加密的幾種模式:
ECB:是一種基礎的加密方式,密文被分割成分組長度相等的塊(不足補齊),然後單獨一個個加密,一個個輸出組成密文。
CBC:是一種循環模式,前一個分組的密文和目前分組的明文異或或操作後再加密,這樣做的目的是增強破解難度。
CFB/OFB:實際上是一種回報模式,目的也是增強破解的難度。
FCB和CBC的加密結果是不一樣的,兩者的模式不同,而且CBC會在第一個密碼塊運算時加入一個初始化向量。
實際加解密代碼如下:(CBC方式使用)
npm安裝操作如下:
1.安裝crypto-js npm install crypto-js --save
2.導入 import CryptoJS from ‘crypto-js/crypto-js’
3.AES加解密代碼如下,備注:重點要關注mode跟padding需跟解密方一緻,比如,在混合式開發中,H5跟native要保持一緻,亦要跟不同的後端語言保持一緻
原生js引用:
//解密
function aesedn(word) {
if(word == null){
return
}
let bytes = CryptoJS.AES.decrypt(word, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedData = bytes.toString(CryptoJS.enc.Utf8);
return decryptedData;
}
// 加密
function aesen(word) {
if(word == null)
return
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
console.log(encrypted.toString())
return encrypted.toString();
}
const key = CryptoJS.enc.Utf8.parse('後端提供');
const iv = CryptoJS.enc.Utf8.parse('後端提供');
vue中封裝
var CryptoJS = require("crypto-js");
//解密方法
function Decrypt(word) {
var key = CryptoJS.enc.Utf8.parse("XXXXXXXXXXXX");
var decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
//加密方法
function Encrypt(word) {
var key = CryptoJS.enc.Utf8.parse("XXXXXXXXXXXX");
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
export {
Decrypt,
Encrypt
}
下面就是具體實作具體操作!!!
希望能夠一直進步,一直前行,各位加油!!!