之前有用到过前端加密,这里做一个加密的总结

一、加密算法介绍

经典的密码学算法有:哈希散列算法对称加密算法非对称加密算法

1.1 哈希散列算法

  • 哈希散列(Hash)算法:一种单向算法,可以通过Hash算法对目标信息生成一的Hash值,却不能通过这个Hash值重新获得目标信息。
  • 应用场景:常用在不可还原的密码存储、信息完整性校验等。
  • 常见的Hash算法:MD2、MD4、MD5、HAVAL、SHA。
单向散列函数MD5

MD5 长度固定,不论输入的内容有多少字节,最终输出结果都为 128 bit,即 16 字节。这也就解释了为什么 MD5 以及其它单向散列函数是不可逆的 —— 输出定长代表会有数据丢失。
通常,我们可以用 16 进制字面值来表示它,每 4 bit 以 16 进制字面值显示,得到的是一个长度为 32 位的字符串。注意,MD5 等单向散列函数具有高度的离散性,意思是只要输入的明文不一样,得到的结果就完全不一样,哪怕是仅仅多了一个空格。

MD5 有下面几种使用场景:

  • 做密码的保护:比如可以不直接存储用户的密码,而是存储密码的 MD5 结果。但是现在一般认为用 MD5 来做加密是不太安全的,更多是利用 MD5 的高度离散性特点,用它来做数字签名、完整性校验,云盘秒传等;
  • 数字签名:我们可以在发布程序时同时发布其 MD5。这样,别人下载程序后自己计算一遍 MD5,一对比就知道程序是否被篡改过,比如植入了木马。
  • 完整性校验:比如前端向后端传输一段非常大的数据,为了防止网络传输过程中丢失数据,可以在前端生成一段数据的 MD5 一同传给后端,这样后端接收完数据后再计算一次 MD5,就知道数据是否完整了。

1.2 对称加密算法

  • 对称加密算法:加密和解密使用相同密钥的加密算法。
  • 优缺点:对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。
  • 常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES
    在这里插入图片描述

1.3 非对称加密算法

  • 对称加密算法:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。
  • 优缺点:非对称加密的缺点是加解密速度要远远慢于对称加密,在极端情况下,甚至能比非对称加密慢上1000倍。
  • 常见的对称加密算法RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
    在这里插入图片描述

加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,除了DES密钥长度不够、MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。

二、Vue3中使用加密算法

安装加密库crypto-js或者jsencrypt

JSEncrypt 的加解密过程需要用到 OpenSSL 来生成秘钥,OpenSSL 是一个开源的软件,它是对 SSL 协议的实现。能够用于生成证书、证书签名、生成秘钥和加解密等。比如我公司最近的项目有个需求是要在本地开发时,localhost 使用 https 协议,就有用到 openssl。

以下是两种常见的开源加密库

# 官网 https://www.npmjs.com/package/crypto-js
# crypto-js进行AES加密,安装: 
npm i --save crypto-js 

# 官网 https://www.npmjs.com/package/jsencrypt
# jsencrypt进行RSA加密,安装: 
npm i --save jsencrypt

代码中使用(公钥一般由后端提供,后端保存有自己的私钥):

import JSEncrypt from 'jsencrypt';

const crypt = new JSEncrypt();
crypt.setKey(import.meta.env.VITE_PUBLIC_kEY); // 设置公钥-此处是引用环境变量
console.log("passWord",crypt.encrypt(userInfo.password));

放一个网图
在这里插入图片描述

加密示例代码 https://blog.csdn.net/qq_32247819/article/details/120821664

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐