加密,解密 crypto-js、 计算哈希值,js-sha3

发布于:2024-04-29 ⋅ 阅读:(37) ⋅ 点赞:(0)

加密,解密 crypto-js、 计算哈希值,js-sha3

在项目中一些不能明文传输,就需要把明文进行加密,解密来保证数据的安全性,一般来说都是前端和后端协定好一种加密方式,然后前端进行参数加密传到后端,后端再去解密。

场景 1:用户登录密码
场景 2:url 明文传递的参数

crypto-js

CryptoJS 是一个不断增长的标准和安全加密算法集合,使用最佳实践和模式在 JavaScript 中实现。它们速度很快,并且具有一致且简单的界面。

crypto-js 中文文档

安装 crypto-js

npm install crypto-js

使用 crypto-js

函数封装,创建 encrypt.js 文件,内容如下

import CryptoJS from "crypto-js";
//我们使用了 CryptoJS 的 AES 加密算法进行加密和解密操作。需要提供一个密钥(key)来加密和解密数据。请确保保护好密钥,尽量不要将其暴露在前端代码中。
export const security = {
  // 加密
  encrypt(word, keyStr) {
    keyStr = keyStr || "defaultSecuritys"; // 16位,密钥字符串
    const key = CryptoJS.enc.Utf8.parse(keyStr);
    const srcs = CryptoJS.enc.Utf8.parse(word);
    const encrypted = CryptoJS.AES.encrypt(srcs, key, {
      mode: CryptoJS.mode.ECB, //加密模式
      padding: CryptoJS.pad.Pkcs7, // 填充方式
    });
    return encrypted.toString();
  },
  // 解密
  decrypt(word, keyStr) {
    keyStr = keyStr || "defaultSecuritys"; // 16位,密钥字符串
    const key = CryptoJS.enc.Utf8.parse(keyStr);
    const decrypt = CryptoJS.AES.decrypt(word, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    });
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  },
};

使用示例

import { security } from "./encrypt.js";
//加密
let encrypted = security.encrypt(JSON.stringify({ value: "加密内容" }));
console.log(encrypted); //mVeyNNUXz8B1hMQUPTADfOepFQqfsvEszQmo5ibfpXM=

//解密
let decrypted = security.decrypt(encrypted);
console.log(decrypted); //{"value":"加密内容"}

传入的 word 必须是字符串类型,直接对对象加密,解密时会返回 [object Object]

js-sha3

js-sha3 是一个 JavaScript 库,用于计算 SHA-3(安全哈希算法-3)和 Keccak 算法的哈希值。你可以使用它在前端或后端进行哈希计算。你可以选择不同的哈希算法(例如 SHA3-224、SHA3-256、SHA3-384、SHA3-512),具体取决于你的需求。
js-sha3 库主要用于计算哈希值,而不是加密和解密数据。

安装 js-sha3

npm install js-sha3

使用 js-sha3

使用示例

import { sha3_512 } from "js-sha3";

function hashData() {
  const input = document.getElementById("input").value;
  const sha3Hash = sha3_512(input);
  document.getElementById("output").innerText = "SHA3-512 哈希值: " + sha3Hash;
}

请记住,哈希函数是单向的,不可逆的,所以不能将哈希值解密为原始数据。