前書き: フロントエンドが何らかのデータを取得または送信するときに、一部の機密情報を暗号化する必要があります。たとえば、最近バグが発生しました。テストでは、ログイン時のユーザーのレベル フィールドが変更され、他のユーザーの権限にあるページが暗号化できるようになりました。見られる。
AES 暗号化には ECB モードと CBC モードの 2 つのモードがあり、バックエンドが合意したものと同じモードを使用する必要があります。
まず、js暗号化アルゴリズムのクラスライブラリを導入します。
npm i crypto-js --save
ECBモード:
key はキーです。バックエンド契約と一致している必要があります。
const CryptoJS = require("crypto-js"); //引用AES源码js
// 加密方法
export function Encrypt(word) {
let key = CryptoJS.enc.Utf8.parse("1234567891234567"); //16位数作为密钥
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
return encrypted.toString();
}
// 解密方法
export function Decrypt(word) {
let key = CryptoJS.enc.Utf8.parse("1234567891234567");//16位数作为密钥
let decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
CBCモード:
key はキーであり、バックエンド合意と一致する必要があります。iv はキーのオフセットです。
const CryptoJS = require('crypto-js'); //引用AES源码js
//解密方法
export function Decrypt(word) {
const key = CryptoJS.enc.Utf8.parse("abcd1234abcd1234"); //16位数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCD1234ABCD1234'); //16位数作为密钥偏移量
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
//加密方法
export function Encrypt(word) {
const key = CryptoJS.enc.Utf8.parse("abcd1234abcd1234"); //16位数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCD1234ABCD1234'); //16位数作为密钥偏移量
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}