JS常见加解密算法小结

 更新时间:2023年12月26日 08:41:13   作者:用户59563584462  
在Web开发中,保护用户数据是至关重要的,而对数据进行加密是其中一种有效手段,本文将深入浅出地介绍常见的加解密算法,包括消息摘要算法、对称加密算法以及非对称加密算法,需要的朋友可以参考下

消息摘要算法

消息摘要算法

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

md5

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

sha1

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

对称加密算法

对称加密算法

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

AES-ECB

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

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

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应用系统的重要一环。

以上就是JS常见加解密算法小结的详细内容,更多关于JS加解密算法的资料请关注脚本之家其它相关文章!

相关文章

  • JS监听一个变量改变的两种方法

    JS监听一个变量改变的两种方法

    在业务中,由于项目采用微前端架构,需要通过A应用的某个值的变化对B应用中的DOM进行改变(如弹出一个Modal),第一个想到的可能是发布订阅模式,其实不如将问题缩小化,采用原生的能力去解决,本文介绍了两种方法来使用JS监听一个变量改变,需要的朋友可以参考下
    2023-11-11
  • JavaScript自定义超时API代码实例

    JavaScript自定义超时API代码实例

    这篇文章主要介绍了JavaScript自定义超时API代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 一文教你彻底学会JavaScript手写防抖节流

    一文教你彻底学会JavaScript手写防抖节流

    其实防抖和节流不仅仅在面试中会让大家手写,在实际项目中也可以起到性能优化的作用,所以还是很有必要掌握的。本文就带大家彻底学会JavaScript手写防抖节流,需要的可以参考一下
    2022-11-11
  • JavaScript实现读取条码中的二进制数据

    JavaScript实现读取条码中的二进制数据

    条码是一种以机器可读的可视形式表示数据的方法,我们可以从条码获取二进制数据,并通过不同方法去读码,下面我们就来看看如何实现读取条码中的二进制数据吧
    2024-03-03
  • JS中的一些常用的函数式编程术语

    JS中的一些常用的函数式编程术语

    这篇文章主要介绍了JS中的一些常用的函数式编程术语,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
    2019-06-06
  • JS的数组的扩展实例代码

    JS的数组的扩展实例代码

    从无忧转过来的数组的扩展 ,非常不错的把javascript数组的扩展
    2008-07-07
  • webpack本地开发环境无法用IP访问的解决方法

    webpack本地开发环境无法用IP访问的解决方法

    下面小编就为大家分享一篇webpack本地开发环境无法用IP访问的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 一文详解Webpack中Tapable事件机制

    一文详解Webpack中Tapable事件机制

    Webpack 是前端工程化常用的静态模块打包工具,在合适的时机通过 Webpack 提供的 API 改变输出结果,使 Webpack 可以执行更广泛的任务,拥有更强的构建能力,本文将介绍 Tapable 的基本使用以及底层实现,需要的朋友可以参考下
    2023-11-11
  • 使用JavaScript制作待办事项列表的示例代码

    使用JavaScript制作待办事项列表的示例代码

    这篇文章主要介绍了如何使用 JavaScript创建待办事项列表HTML的完整信息和教程,文中但是示例代码讲解详细,感兴趣的同学可以动手试一试
    2022-01-01
  • js中传递特殊字符(+,&)的方法

    js中传递特殊字符(+,&)的方法

    这篇文章主要介绍了js中传递特殊字符(+,&)的方法,有需要的朋友可以参考一下
    2014-01-01

最新评论