前言
什么是加密算法? 百度百科给出的解释是:数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。 通俗点来讲,就是一段明文信息,按照规则,转换成不可读的密文数据。
web中常见的加密算法
1. 单向散列加密
单向散列(hash)加密是指把任意长的输入串变化成固定长的输出串,并且由输出串难以得到输入串的加密方法,这种方法称为单项散列加密。广泛应用于对敏感数据加密,比如用户密码,请求参数,文件加密等。我们开发中存储用户密码就用到了单向散列加密算法
单向散列函数特点:
- 对任意长度的消息散列值是定长的。
- 散列计算速度快,非常高效。
- 明文不同,散列加密后的密文一定不同;明文相同,散列加密后密文一定相同。
- 具备单向性,无法逆推计算。
常见的单向散列算法:
- MD5:
输入任意长度的信息,经过处理,输出为128位的信息(数字指纹); 不同的输入得到的不同的结果(唯一性); 根据128位的输出结果不可能反推出输入的信息(不可逆); 2. SHA SHA0:1993年发布,可以产生160 bit 的消息摘要,但是存在重大缺陷被撤销; SHA1:1995年发布,可以产生160 bit 的消息摘要,也存在缺陷(不推荐使用); SHA2:包括SHA256算法、SHA384算法、SHA512算法; SHA3:支持与SHA2相同的消息摘要长度,但是算法内部结构不同;
2. 对称加密
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。
对称加密的特点:
- 算法公开、计算量小、加密速度快、加密效率高
- 在数据传送前,发送方和接收方必须商定好密钥,然后双方保存好密钥。如果一方的密钥被泄露,那么加密信息也就不安全了
常见的单向散列算法:
- AES(高级加密标准)
3. 非对称加密
非对称加密是指需要两个密钥来进行加密和解密,这两个秘钥分别是公钥(public key)和私钥(private key),如果用公钥对数据进行加密,只有用对应的私钥才能解密。
对称加密的特点:
- 安全性更好,加解密需要不同的密钥,公钥和私钥都可进行相互的加解密
- 加密和解密花费时间长、速度慢,只适合对少量数据进行加密
常见的单向散列算法:
- RSA
项目中加密需求的解决方案
加密算法虽然原理特别复杂,但是前人都给我们造好了轮子。这里给大家推荐一款特别强大的无框架限制的 加密算法库 CryptoJS
crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。
CryptoJS的使用
npm install crypto-js
import CryptoJS from 'crypto-js'
借用自己项目中使用的一个简单的AES加密功能给大家看下基本的用法
crypto 还提供其他常用加密算法的api,基础用法 基本大同小异。在此就不一一赘述。需求中遇到可以 精确查找使用方法