フロントエンド AES 暗号化の詳細とソース コード

前書き: フロントエンドが何らかのデータを取得または送信するときに、一部の機密情報を暗号化する必要があります。たとえば、最近バグが発生しました。テストでは、ログイン時のユーザーのレベル フィールドが変更され、他のユーザーの権限にあるページが暗号化できるようになりました。見られる。

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();
}

おすすめ

転載: blog.csdn.net/wzy_PROTEIN/article/details/129663759