在 JavaScript 中实现数据加密与解密:Web Cryptography API 与 CryptoJS详解
// 使用Web Cryptography API进行非对称加密与解密
// 生成非对称密钥对
crypto.subtle.generateKey(
{
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
hash: "SHA-256",
},
true,
["encrypt", "decrypt"]
)
.then(function(key) {
// 获取公钥
var publicKey = key.publicKey;
// 获取私钥
var privateKey = key.privateKey;
// 使用公钥加密数据
crypto.subtle.encrypt(
{
name: "RSA-OAEP",
hash: "SHA-256"
},
publicKey,
dataToEncrypt
)
.then(function(encryptedData) {
// 处理加密后的数据
console.log(encryptedData);
// 使用私钥解密数据
crypto.subtle.decrypt(
{
name: "RSA-OAEP",
hash: "SHA-256"
},
privateKey,
encryptedData
)
.then(function(decryptedData) {
// 处理解密后的数据
console.log(decryptedData);
});
});
});
// 使用CryptoJS进行AES密钥生成与加密解密
var dataToEncrypt = "需要加密的数据";
var aesKey = CryptoJS.lib.WordArray.random(128/8); // 生成128位的AES密钥
var encryptedData = CryptoJS.AES.encrypt(dataToEncrypt, aesKey);
var decryptedData = CryptoJS.AES.decrypt({ciphertext: CryptoJS.enc.Hex.parse(encryptedData.ciphertext)}, aesKey);
console.log(encryptedData.toString()); // 输出加密数据
console.log(decryptedData.toString(CryptoJS.enc.Utf8)); // 输出解密数据
这段代码展示了如何使用Web Cryptography API生成非对称密钥对并进行加密解密,以及如何使用CryptoJS库生成随机的AES密钥并对数据进行加密解密。这两种方法在安全性和性能上都有所不同,开发者可以根据实际需求选择合适的方法。
评论已关闭