CryptoJS AES对称 JSEncrypt RSA非对称-使用封装

AES对称加密我们采用 CryptoJS,AES加密支持AES-128、AES-192和AES-256 https://github.com/brix/crypto-js

RSA非对称加密我们采用JSEncrypt https://github.com/travist/jsencrypt

安装

npm i CryptoJS jsencrypt

封装 encrypt.js

import CryptoJS from 'crypto-js';
import { JSEncrypt } from 'jsencrypt';

// ==========================AES对称加密我们采用 CryptoJS==========================
/**
 * 使用AES算法加密消息
 * @param {string} message - 要加密的消息
 * @param {string} secretKey - 加密密钥
 * @returns {string} - 加密后的字符串
 */
export function AESEncrypt(message, secretKey) {
  // 使用AES算法进行加密
  const encrypted = CryptoJS.AES.encrypt(message, secretKey).toString();
  return encrypted;
}

/**
 * 使用AES算法解密消息
 * @param {string} encryptedMessage - 加密后的消息字符串
 * @param {string} secretKey - 解密密钥
 * @returns {string} - 解密后的字符串
 */
export function AESDecrypt(encryptedMessage, secretKey) {
  // 使用AES算法进行解密
  const bytes = CryptoJS.AES.decrypt(encryptedMessage, secretKey);
  // 将解密后的数据转换为UTF-8字符串
  const decrypted = bytes.toString(CryptoJS.enc.Utf8);
  return decrypted;
}

// ==========================RSA非对称加密我们采用JSEncrypt==========================
// 密钥对生成 http://web.chacuo.net/netrsakeypair

// 加密
export const encryptMessage = (publicKey, message) => {
  const encrypt = new JSEncrypt();
  encrypt.setPublicKey(publicKey); // 设置公钥
  return encrypt.encrypt(message); // 对数据进行加密
};

// 解密
export const decryptMessage = (privateKey, encryptedMessage) => {
  const decrypt = new JSEncrypt();
  decrypt.setPrivateKey(privateKey); // 设置私钥
  return decrypt.decrypt(encryptedMessage); // 对数据进行解密
};

使用

import { AESEncrypt, AESDecrypt, encryptMessage, decryptMessage } from '@/utils/encrypt.js';

// 1 AES对称
const message = 'Hello, World!';
const secretKey = 'mySecretKey';

// 加密
const encryptedMessage = AESEncrypt(message, secretKey);
console.log('Encrypted Message: ', encryptedMessage);

// 解密
const decryptedMessage = AESDecrypt(encryptedMessage, secretKey);
console.log('Decrypted Message: ', decryptedMessage);

// 检查点
// 密钥一致性:确保加密和解密使用相同的密钥。
// 消息格式:确保在加密和解密过程中消息格式一致。
// 编码格式:确保加密输出和解密输入的格式(如Base64)一致。

// 2 RSA非对称
const publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgD4eXE+ib6kANRxTgRmpHxH5F
PgzVFWd9EHJqQcsnpl/Ym68JqohMbg/KR7jZp0aigBbSMpO/9HH0VTSpSwM6jLoO
wHjPMRHotH42BPdrkH8qd8XFt7sciXNwvC/fZUh7qwG1mVKHgkQeMn5aMqkJ8ir+
xE/BJ+WV3mhRcU3JpwIDAQAB
-----END PUBLIC KEY-----`;
const privateKey = `-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOAPh5cT6JvqQA1H
FOBGakfEfkU+DNUVZ30QcmpByyemX9ibrwmqiExuD8pHuNmnRqKAFtIyk7/0cfRV
NKlLAzqMug7AeM8xEei0fjYE92uQfyp3xcW3uxyJc3C8L99lSHurAbWZUoeCRB4y
floyqQnyKv7ET8En5ZXeaFFxTcmnAgMBAAECgYAXgEl+hS4OvIE/Y0dDRt9665c6
+AksiHQ0X/dAQepnHEJNW/b+Eo79RUYOt3siCTOVc83w+jEZHzCcqhs97opF9Zr3
UPLcti1L5+NLfzaez/KEXkbAaSixq24Ni4Aah/LJ2xzWNQ4V14DlzCUoY3a54999
XIN8P5+FVMQXQfos8QJBAPgXTTSP0HH6Bimzijj6dUaSMhdLHbG0a2IrrKSSP5CF
b2vIa3EPqyKgELB1x/N4W8kJJs7JAiwapsv0P5IcB20CQQDnNB0XCe3y7v2JG7tr
YOsFRtwxShFFqx7wBhwS77Q81z17+gEEuLwjNQYYYVX3a8UUTMZObZ3fIAh11gPK
u4TjAkEAka59M6RPrt42yD4ZqKPKQgqPR4ZghX2AoUEsO+d1VBRG/W/PR7D/uXFs
23IOXDYND9xD4aG/mM59q75dphq3cQJBAOZZjq4Yj4FdyS6keat3KVDdk55sDB9c
aXt8qtXXCr0fObvejss0fwWY25TIzYywS+94uo8DOapHUQaODsMa5z8CQD1IjrLY
ddqTCLNS+VT+qOKOdrDiHYNfSHbfD9kwOxjuBswTCr15E+8gvEheaxBI1I0nskKf
cQNV1g7u+ePgEMM=
-----END PRIVATE KEY-----
`;
const message2 = 'Hello, RSA!';
const encryptedMessage2 = encryptMessage(publicKey, message2);
console.log('Encrypted Message:', encryptedMessage2);

const decryptedMessage2 = decryptMessage(privateKey, encryptedMessage2);
console.log('Decrypted Message:', decryptedMessage2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JackieDYH

谢谢您嘞!我会继续加油地

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

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

打赏作者

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

抵扣说明:

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

余额充值