JavaScript加密解密是一种在客户端进行数据保护的重要手段,主要用于防止数据在传输过程中被窃取或篡改,常见的加密解密方法有对称加密、非对称加密和哈希算法等,本文将介绍这些加密解密方法的原理及在JavaScript中的实现。
1、对称加密
对称加密是指加密和解密使用相同的密钥的加密算法,常见的对称加密算法有AES、DES、3DES等,在JavaScript中,可以使用crypto-js库来实现对称加密。
安装crypto-js库:
npm install crypto-js
使用AES加密和解密示例:
const CryptoJS = require('crypto-js'); // 加密 function encrypt(data, key) { const encrypted = CryptoJS.AES.encrypt(data, key); return encrypted.toString(); } // 解密 function decrypt(encryptedData, key) { const decrypted = CryptoJS.AES.decrypt(encryptedData, key); return decrypted.toString(CryptoJS.enc.Utf8); } const data = '需要加密的数据'; const key = '密钥'; const encryptedData = encrypt(data, key); console.log('加密后的数据:', encryptedData); const decryptedData = decrypt(encryptedData, key); console.log('解密后的数据:', decryptedData);
2、非对称加密
非对称加密是指加密和解密使用不同的密钥,通常分为公钥和私钥,常见的非对称加密算法有RSA、ECC等,在JavaScript中,可以使用crypto-js库来实现非对称加密。
安装crypto-js库:
npm install crypto-js
使用RSA加密和解密示例:
const CryptoJS = require('crypto-js'); const RSAKey = new CryptoJS.lib.WordArray.create([]); // 请先生成一对公钥和私钥,并赋值给RSAKey.words[0]和RSAKey.words[1] const publicKey = RSAKey.words[0]; const privateKey = RSAKey.words[1]; // 加密 function encrypt(data, publicKey) { const encrypted = CryptoJS.enc.Base64.stringify(CryptoJS.RSA.encrypt(data, publicKey)); return encrypted; } // 解密 function decrypt(encryptedData, privateKey) { const decrypted = CryptoJS.enc.Base64.parse(encryptedData).toString(CryptoJS.enc.Utf8); return decrypted; } const data = '需要加密的数据'; const encryptedData = encrypt(data, publicKey); console.log('加密后的数据:', encryptedData); const decryptedData = decrypt(encryptedData, privateKey); console.log('解密后的数据:', decryptedData);
3、哈希算法
哈希算法是一种单向不可逆的加密算法,常用于生成数据的摘要信息,常见的哈希算法有MD5、SHA-1、SHA-256等,在JavaScript中,可以使用crypto-js库来实现哈希算法。
安装crypto-js库:
npm install crypto-js
使用SHA-256哈希示例:
const CryptoJS = require('crypto-js'); const hashAlgorithm = CryptoJS.algo.SHA256; // 选择哈希算法,这里使用SHA-256 const data = '需要哈希的数据'; // 需要哈希的数据,可以是字符串或其他数据类型 const hashValue = hashAlgorithm(data).toString(); // 计算哈希值并转换为字符串形式 console.log('哈希值:', hashValue); // 输出哈希值,通常用于校验数据完整性或生成数字签名等场景