前端AES加密详解与源码

前言:前端在一些数据获取或提交时有些敏感信息需要加密处理,比如最近遇到一个bug,是测试在登录时修改了用户的等级字段,从而就看到了其他用户权限下的页面。

AES加密有两种模式:ECB模式和CBC模式,需要与后端约定好使用相同的模式

首先,先引入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
今日推荐