CryptoJS库在JavaScript中的加密应用详解

CryptoJs是一个功能强大的JavaScript加密标准库,提供了丰富的加密算法和工具,帮助开发者保护敏感信息。本文将系统梳理其核心功能、常用算法实现及关键注意事项。


核心功能概览

CryptoJs支持多种加密算法和哈希函数,涵盖以下核心能力:

类型具体算法
对称加密算法 AES、DES、RC4
哈希算法 MD5、SHA系列(SHA-1、SHA-256、SHA-512等)、RIPEMD-160
HMAC 基于哈希的消息认证码
编码转换 Base64、UTF-8、Hex
密钥派生函数 PBKDF2、EvpKDF

常用加密算法实现

AES加密解密

const CryptoJS = require("crypto-js");

// 密钥和IV(初始向量)
const KEY = CryptoJS.enc.Utf8.parse("1234567890000000"); // 16位密钥
const IV = CryptoJS.enc.Utf8.parse("1234567890000000");  // 16位IV

// 加密
function encryptAES(message) {
    const srcs = CryptoJS.enc.Utf8.parse(message);
    const encrypted = CryptoJS.AES.encrypt(srcs, KEY, {
        iv: IV,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString(); // 返回Base64格式的密文
}

// 解密
function decryptAES(encryptedBase64) {
    const decrypted = CryptoJS.AES.decrypt(encryptedBase64, KEY, {
        iv: IV,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

// 使用示例
const originalText = "Hello, World!";
const encryptedText = encryptAES(originalText);
const decryptedText = decryptAES(encryptedText);

console.log("Original:", originalText);
console.log("Encrypted:", encryptedText);
console.log("Decrypted:", decryptedText);

  

SHA-256哈希

const CryptoJS = require("crypto-js");

function sha256Hash(message) {
    return CryptoJS.SHA256(message).toString();
}

// 使用示例
const hashResult = sha256Hash("Hello, World!");
console.log("SHA-256 Hash:", hashResult);

  

HMAC

const CryptoJS = require("crypto-js");

function hmacSHA256(message, secret) {
    return CryptoJS.HmacSHA256(message, secret).toString();
}

// 使用示例
const secretKey = "mySecretKey";
const hmacResult = hmacSHA256("Hello, World!", secretKey);
console.log("HMAC-SHA256:", hmacResult);

  

关键注意事项

密钥和IV管理

  • 密钥和IV应妥善保管,避免硬编码在代码中
  • 建议使用环境变量或密钥管理系统来存储和管理密钥

加密模式选择

  • AES支持多种加密模式(如CBC、ECB等),CBC模式相比ECB更安全,因为它使用了IV来增加加密的随机性

数据编码

  • 在加密前,确保数据已正确编码(如UTF-8)
  • 解密后,需要将结果从加密库的特定格式(如WordArray)转换为可读字符串

错误处理

  • 在实际应用中,应添加适当的错误处理逻辑,以应对密钥不匹配、数据格式错误等情况

高级功能实现

PBKDF2密钥派生

const CryptoJS = require("crypto-js");

function deriveKey(password, salt, iterations, keySize) {
    return CryptoJS.PBKDF2(password, salt, {
        keySize: keySize / 32, // 转换为字(word)数
        iterations: iterations
    }).toString();
}

// 使用示例
const password = "myPassword";
const salt = CryptoJS.lib.WordArray.random(128 / 8); // 随机盐值
const iterations = 1000;
const keySize = 256; // 位

const derivedKey = deriveKey(password, salt, iterations, keySize);
console.log("Derived Key:", derivedKey);

  

Base64编码解码

const CryptoJS = require("crypto-js");

// Base64编码
function encodeBase64(message) {
    const wordArray = CryptoJS.enc.Utf8.parse(message);
    return CryptoJS.enc.Base64.stringify(wordArray);
}

// Base64解码
function decodeBase64(base64String) {
    const wordArray = CryptoJS.enc.Base64.parse(base64String);
    return wordArray.toString(CryptoJS.enc.Utf8);
}

// 使用示例
const encoded = encodeBase64("Hello, World!");
const decoded = decodeBase64(encoded);

console.log("Base64 Encoded:", encoded);
console.log("Base64 Decoded:", decoded);

  https://comate.baidu.com/zh/page/jc53v42dul8

posted @ 2026-08-31 21:17  画画520  阅读(6)  评论(0)    收藏  举报