JS常见加解密算法

在Web开发中,保护用户数据是至关重要的,而对数据进行加密是其中一种有效手段。本文将深入浅出地介绍常见的加解密算法,包括消息摘要算法、对称加密算法以及非对称加密算法。

消息摘要算法

消息摘要算法

消息摘要算法是一种单向散列函数,常用于加密和数据完整性验证。常见的消息摘要算法包括MD5、SHA-1、SHA-256和SHA-512等。它的特点是对不同的明文生成唯一且定长的密文,是不可逆的,即无法通过"密文"还原出明文。

md5

ini 复制代码
const CryptoJs = require('crypto-js');
let password = "123456";
let encPwd = CryptoJs.MD5(password).toString();
console.log(encPwd);  // e10adc3949ba59abbe56e057f20f883e

sha1

ini 复制代码
const CryptoJs = require('crypto-js');
let password = "123456";
let encPwd = CryptoJs.SHA1(password).toString();
console.log(encPwd);  // 7c4a8d09ca3762af61e59520943dc26494f8941b

对称加密算法

对称加密算法

对称加密算法是一种加密技术,它使用相同的密钥(称为对称密钥)同时用于加密和解密数据。常见的加密算法有DESAES3DES等。AES是一种广泛使用的对称加密算法,被认为是目前最安全的对称加密算法之一。

AES-ECB

ini 复制代码
let password = "123456";
let key = "1234567890abcdef"
cfg = {
 mode: CryptoJs.mode.ECB,
 padding: CryptoJs.pad.Pkcs7
}
let encPwd = CryptoJs.AES.encrypt(password, key, cfg).toString()
console.log(encPwd)  // U2FsdGVkX1+meKI+IXd44qgc50bKb2rDbN91OutwBWs=

根据密钥长度的不同, 可以把AES加密算法分为AES-128/AES-192/AES-256。也就是说密钥的长度必须是16/24/32个字节 。常见mode模式有CBCECB两种,这两种模式的区别在于是否需要配置iv向量

AES-CBC

ini 复制代码
const CryptoJs = require('crypto-js');
let password = CryptoJs.enc.Utf8.parse("123456")  // 指定以什么编码方式解析明文
let key = CryptoJs.enc.Utf8.parse("1234567890abcdef")
let iv = CryptoJs.enc.Utf8.parse("123456")  // 需指定初始向量
cfg = {
 mode: CryptoJs.mode.CBC,
 padding: CryptoJs.pad.Pkcs7,
 iv: iv
}
let encPwd = CryptoJs.AES.encrypt(password, key, cfg).toString()

非对称加密算法

非对称加密算法

非对称加密算法是一种密码学中的加密方式,也被称为公钥加密算法。与对称加密算法不同,非对称加密算法使用一对密钥,分别是公钥和私钥。非对称加密算法的一个关键特性是,使用公钥加密的数据只能由相应的私钥解密,而使用私钥加密的数据只能由相应的公钥解密。常见的非对称加密算法包括RSA和ECC等

公钥可以公开分享的密钥,用于加密数据。任何人都可以获得公钥,但不能由公钥推导出私钥。

私钥是保密的密钥,用于解密由公钥加密的数据。只有私钥的持有者能够解密使用公钥加密的信息。

RSA

ini 复制代码
window = global
const JSEncrypt = require('jsencrypt')
publickey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnX3j/luQG7JnPFIFJKEvPC/tFtv14XIzT7FQXYpKsOt2t4uLh6hZa5H5WcEinF46nc91UbrS5UA9Fnnm+Ev20pwUEPVu4On47am6vJOsq8oqQoZDsMu6VGZIzKIm8vDylO6I2xrTaXY2G3hdiRKF7988tA4oYsFOTZ/yG/BOlNwIDAQAB'
// 加密
let jse = new JSEncrypt()
jse.setPublicKey(publickey)
var encStr = jse.encrypt('123456')
console.log("加密数据: " + encStr)
// 解密
privatekey = 'MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKdfeP+W5Absmc8UgUkoS88L+0W2/XhcjNPsVBdikqw63a3i4uHqFlrkflZwSKcXjqdz3VRutLlQD0Weeb4S/bSnBQQ9W7g6fjtqbq8k6yryipChkOwy7pUZkjMoiby8PKU7ojbGtNpdjYbeF2JEoXv3zy0DihiwU5Nn/Ib8E6U3AgMBAAECgYA6KW0stEytM08HrQJ4X65oVquMwFg4mUC+7CMUtUZu303lfTCGfQgjsb9NXluA5SjHe/Xvv0DCHNYRxU5dBNBwhIXaRLy6zLKKKp/0gOn1C3dFY/MQOVoEpJ8uxUQh9Kf37F5J9gT64JNooKTTNydqTcmfIhG/u3WFiTVjfW5sEQJBANmvAgUneA6eEC6LwhX9gxdp0T2S+hop19zAm4ErHQld47TlSAxVgwArQG4oJ5J2OWlIT4vzuO1OJOaCj4wZYXMCQQDE1W0uZA1YtjVK7OUuD3f/rgNzolpc0XEEZDPxKsoirEFgW/cFNCTJKIdGK2RgnthLWiN01a9bL6+sF2vLO2wtAkAd0h3Cuv91cS3iUn8KKCqXQIXLm6DriKPrt+8VqORXbidNlsNh/SzvDv3KmXGiXNPMmn1bPM4upC/l7CjiFnAFAkBnmu+dO4zK5R2oEomPdRT0v+OROiPWN2gFp7iveJZtKb4/uiiL1KaIO4z4ol5zfSjcgNWo6dEjbjZJnwpeLykBAkAY/tYLGyrHe0isoZL2xXPlrvde2tbKcbzMrheH1wuqEMX0o0+uHCyFgn2rAzMcfUlntb9iZLLJDkJ+bFET1j3l'
jse.setPrivateKey(privatekey)
var Str = jse.decrypt(encStr)
console.log("解密数据: " + Str)

本文介绍了Web开发中常见的加解密算法,包括消息摘要、对称加密和非对称加密。这些算法在保障用户数据安全、通信加密方面发挥着关键作用。深入理解它们有助于开发者选择合适的安全策略,确保系统的完整性和用户隐私的最大保护。在数字化时代,掌握这些加密技术是构建可信赖Web应用系统的重要一环。

相关推荐
SameX2 分钟前
初识 HarmonyOS Next 的分布式管理:设备发现与认证
前端·harmonyos
M_emory_29 分钟前
解决 git clone 出现:Failed to connect to 127.0.0.1 port 1080: Connection refused 错误
前端·vue.js·git
Ciito32 分钟前
vue项目使用eslint+prettier管理项目格式化
前端·javascript·vue.js
成都被卷死的程序员1 小时前
响应式网页设计--html
前端·html
mon_star°1 小时前
将答题成绩排行榜数据通过前端生成excel的方式实现导出下载功能
前端·excel
Zrf21913184551 小时前
前端笔试中oj算法题的解法模版
前端·readline·oj算法
文军的烹饪实验室3 小时前
ValueError: Circular reference detected
开发语言·前端·javascript
Martin -Tang4 小时前
vite和webpack的区别
前端·webpack·node.js·vite
迷途小码农零零发4 小时前
解锁微前端的优秀库
前端
王解5 小时前
webpack loader全解析,从入门到精通(10)
前端·webpack·node.js