crypto-js —— 加密标准的 JavaScript 库

  • Post author:
  • Post category:java





crypto-js – npm


JavaScript library of crypto standards.. Latest version: 4.1.1, last published: 7 months ago. Start using crypto-js in your project by running `npm i crypto-js`. There are 6826 other projects in the npm registry using crypto-js.



https://www.npmjs.com/package/crypto-js




目录


一. 使用场景


二. 使用方法(以 AES 为例)


2.1 安装 crypto-js


2.2 定义加密密钥及偏移量


2.3 AES 加密


2.4 AES 解密


2.5 测试效果


一. 使用场景

接口传参时,默认是明码传输,为了提高安全性,可使用 crypto-js 对参数进行

加密处理



crypto-js —— 一套加密标准的 JavaScript 库

二. 使用方法(以 AES 为例)

2.1 安装 crypto-js

npm install crypto-js

2.2 定义加密密钥及偏移量




加密密钥、偏移量硬性要求:





长度必须是 16 的整数倍



import { enc, mode, AES, pad } from 'crypto-js';

// 加密密钥(长度必须是 16 的整数倍,此处为 32 位)
const secretKey = '5405****778e38****fe5a12****b4ce';
// 偏移量
const iv = 'solu********tion';

2.3 AES 加密

/**
 * ASE加密
 * @description 使用加密秘钥,对 需要加密的参数 进行加密
 * @param {string} word - 需要加密的参数
 * @param {string} key - 加密密钥(长度必须是 16 的整数倍)
 * @param {string} offset - 偏移量
 */
export function aseEncryptParams(word: any, key = secretKey, offset = iv) {
  // 未加密的参数 - 从 UTF-8编码 解析出原始字符串
  const wordUTF8 = enc.Utf8.parse(word);
  // 密钥 - 从 UTF-8编码 解析出原始字符串
  const keyUTF8 = enc.Utf8.parse(key);
  // 偏移量(在此公司内是固定的) - 从 UTF-8编码 解析出原始字符串
  const offsetUTF8 = enc.Utf8.parse(offset);

  // 补充
  // 把字符串转成 UTF-8编码 —— enc.Utf8.stringify(word);

  const encrypted = AES.encrypt(wordUTF8, keyUTF8, {
    iv: offsetUTF8,
    mode: mode.CBC,
    padding: pad.Pkcs7,
  });

  return encrypted.toString();
}

2.4 AES 解密

/**
 * ASE解密
 * @description 使用加密秘钥,对 需要解密的参数 进行解密
 * @param {string} encryptedWord - 需要解密的参数
 * @param {string} key - 加密密钥(长度必须是 16 的整数倍)
 * @param {string} offset - 偏移量
 */
export function aesDecryptParams(encryptedWord: any, key = secretKey, offset = iv) {
  // 密钥 - 从 UTF-8编码 解析出原始字符串
  const keyUTF8 = enc.Utf8.parse(key);
  // 偏移量(在此公司内是固定的) - 从 UTF-8编码 解析出原始字符串
  const offsetUTF8 = enc.Utf8.parse(offset);

  const bytes = AES.decrypt(encryptedWord, keyUTF8, {
    iv: offsetUTF8,
    mode: mode.CBC,
    padding: pad.Pkcs7,
  });

  return bytes.toString(enc.Utf8);
}

2.5 测试效果

  const testASEJM = {
    chinese: "中文加密测试",
    english: "test",
    number: 2,
    array: [{
        arr: "test",
    }],
    deepObj: {
      children: "deepObj",
      deepArr: [{
          deep: "deep",
      }],
    },
  };
  • 将对象转换为 JSON字符串 后,进行加密:


console.log(‘result ===’, aseEncryptParams(JSON.stringify(testASEJM)));


resutl:// WfwdbmOmIoB0GZ0Mak7o521DRFQ4LY6FV8jEjT41


+


0mSQG

  • 将加密参数进行解密,并转换为 JSON对象:


console.log(

‘result ===’,

JSON.parse(

aesDecryptParams(

aseEncryptParams(

JSON.stringify(testASEJM)

)))

);


resutl:// 复原了



版权声明:本文为Lyrelion原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。