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

crypto-js - npmJavaScript 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:// 复原了

引用[1]中提到了使用crypto-js进行加密的方法。具体来说,可以使用AES加密算法对数据进行加密。在加密过程中,需要提供一个AES密钥(AESKey)和待加密的数据(value)。加密的过程包括以下几个步骤: 1. 将AES密钥转换为UTF-8编码的格式。 2. 根据AES密钥的前16位生成一个偏移量(iv)。 3. 将待加密的数据转换为UTF-8编码的格式。 4. 使用AES算法和指定的加密模式(ECB)、填充方式(Pkcs7)对数据进行加密。 5. 将加密后的数据转换为Base64字符串并返回。 具体的加密方法如下: ```javascript const encryption = (value: string, AESKey: string) => { let key = CryptoJS.enc.Utf8.parse(AESKey); let iv = CryptoJS.enc.Utf8.parse(AESKey.substr(0, 16)); let srcs = CryptoJS.enc.Utf8.parse(value); let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, }); return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); } ``` 引用[2]中提到了使用crypto-js进行解密的方法。解密的过程与加密相反,需要提供AES密钥(AESKey)和待解密的数据(value)。解密的过程包括以下几个步骤: 1. 将AES密钥转换为UTF-8编码的格式。 2. 根据AES密钥的前16位生成一个偏移量(iv)。 3. 使用AES算法和指定的解密模式(ECB)、填充方式(Pkcs7)对数据进行解密。 4. 将解密后的数据转换为UTF-8编码的格式并返回。 具体的解密方法如下: ```javascript const decryption = (value: string, AESKey: string) => { const key = CryptoJS.enc.Utf8.parse(AESKey); let iv = CryptoJS.enc.Utf8.parse(AESKey.substr(0, 16)); const decrypt = CryptoJS.AES.decrypt(value, key, { iv: iv, mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); } ``` 引用[3]中提到了crypto-js的简介。crypto-js是一个纯JavaScript加密算法类,可以方便地在前端进行各种加解密操作。它支持的算法包括MD5、SHA-1、SHA-256、AES、RSA、Rabbit、MARC4、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、PBKDF2等。使用时可以引入整个crypto-js,也可以单独引入需要使用的算法文件。 你可以通过以下方式下载和使用crypto-js: 1. 下载地址:https://github.com/brix/crypto-js/releases 2. 引入crypto-js.js文件: ```html <script src="crypto-js.js"></script> ``` 综上所述,你可以使用crypto-js进行文件加密操作。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyrelion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值