您当前的位置:首页 > 互联网教程

如何使用CryptoJS的AES方法进行加密和解密

发布时间:2025-05-22 20:48:02    发布人:远客网络

如何使用CryptoJS的AES方法进行加密和解密

一、如何使用CryptoJS的AES方法进行加密和解密

var plaintText='aaaaaaaaaaaaaaaa';//明文

var keyStr='bbbbbbbbbbbbbbbb';//一般key为一个字符串

参看官网文档,AES方法是支持AES-128、AES-192和AES-256的,加密过程中使用哪种加密方式取决于传入key的类型,否则就会按照AES-256的方式加密。

CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key.

由于Java就是按照128bit给的,但是由于是一个字符串,需要先在前端将其转为128bit的才行。

最开始以为使用CryptoJS.enc.Hex.parse就可以正确地将其转为128bit的key。但是不然...

经过多次尝试,需要使用CryptoJS.enc.Utf8.parse方法才可以将key转为128bit的。好吧,既然说了是多次尝试,那么就不知道原因了,后期再对其进行更深入的研究。

//字符串类型的key用之前需要用uft8先parse一下才能用

var key= CryptoJS.enc.Utf8.parse(keyStr);

由于后端使用的是PKCS5Padding,但是在使用CryptoJS的时候发现根本没有这个偏移,查询后发现PKCS5Padding和PKCS7Padding是一样的东东,使用时默认就是按照PKCS7Padding进行偏移的。

var encryptedData= CryptoJS.AES.encrypt(plaintText, key,{

由于CryptoJS生成的密文是一个对象,如果直接将其转为字符串是一个Base64编码过的,在encryptedData.ciphertext上的属性转为字符串才是后端需要的格式。

var encryptedBase64Str= encryptedData.toString();

//输出:'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='

console.log(encryptedBase64Str);

//需要读取encryptedData上的ciphertext.toString()才能拿到跟Java一样的密文

var encryptedStr= encryptedData.ciphertext.toString();

//输出:'44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'

由于加密后的密文为128位的字符串,那么解密时,需要将其转为Base64编码的格式。

那么就需要先使用方法CryptoJS.enc.Hex.parse转为十六进制,再使用CryptoJS.enc.Base64.stringify将其变为Base64编码的字符串,此时才可以传入CryptoJS.AES.decrypt方法中对其进行解密。

//拿到字符串类型的密文需要先将其用Hex方法parse一下

var encryptedHexStr= CryptoJS.enc.Hex.parse(encryptedStr);

//只有Base64类型的字符串密文才能对其进行解密

var encryptedBase64Str= CryptoJS.enc.Base64.stringify(encryptedHexStr);

使用转为Base64编码后的字符串即可传入CryptoJS.AES.decrypt方法中进行解密操作。

var decryptedData= CryptoJS.AES.decrypt(encryptedBase64Str, key,{

经过CryptoJS解密后,依然是一个对象,将其变成明文就需要按照Utf8格式转为字符串。

//解密后,需要按照Utf8的方式将明文转位字符串

var decryptedStr= decryptedData.toString(CryptoJS.enc.Utf8);

console.log(decryptedStr);//'aaaaaaaaaaaaaaaa'

二、对比jsencrypt和cryptojs,简单介绍安装方式和导入方式

jsencrypt和 crypto-js在 JavaScript加密库中各有特点。

jsencrypt主要用于非对称算法,特别是 RSA加密和解密,支持密钥生成、加密和解密等接口,并兼容多种填充模式和哈希算法,广泛应用于前端与后端数据传输加密和安全通讯。

安装 jsencrypt可以使用以下 npm命令:

crypto-js则侧重于消息摘要算法、对称加密和简单哈希函数,支持 AES、DES、SHA-1、HMAC等算法,适用于客户端本地数据加密、散列或签名处理等场景。

三、node-jsencrypt 和 crypto-js

专门用于RSA加密的库是node-jsencrypt。要安装它,只需在终端中输入命令npm i jsencrypt。

另一方面,crypto-js库在处理base64、md5、sha256和AES加密需求时提供全面支持,简化了加密过程。它无需额外考虑其他加密方案。

设置密钥和密钥偏移量时,enc.Utf8.parse这个函数会出现在前端代码中,提示开发者使用crypto-js库。

在前端JavaScript中,当看到setMaxDigits、RSAKeyPair、encryptedString等函数时,意味着需要自定义实现RSA加密功能。

示例:使用node-jsencrypt进行加密时,关键在于setPrivateKey函数的运用。

对比之下,crypto-js库的示例特征为enc.Utf8.parse,显示了其在加密方面的灵活性与广泛支持。