前言
为破解前端加密做准备,先了解一些常见的加密算法
分类
- 对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
DES
DES 算法把 64 位(8 字节)的明文输入块变为 64 位的密文输出块(分组加密),它所使用的密钥也是 64 位(不足 64 位会自动补齐)
弊端:只能加密最大 64 位数据
关键参数:密钥 key
JS 实现:
//调用
可以看到,加解密时最重要的一个东西便是密钥 key
AES
DES 的升级替代品,AES 为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。
在 AES 标准规范中,分组长度只能是 128 位,也就是说,每个分组为 16 个字节(每个字节 8 位)。密钥的长度可以使用 128 位、192 位或 256 位。密钥的长度不同,推荐加密轮数也不同
关键参数:密钥 key,偏移量 iv
JS 实现:
//首先要引入 https://github.com/sytelus/CryptoJS 中的两个文件
//这个文件不是固定的,需要根据不同的填充方式而更改
- 非对称加密
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
在公开密钥密码体制中,加密密钥(即公开密钥)PK 是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥 SK 是由公开密钥 PK 决定的,但却不能根据 PK 计算出 SK。
RSA
RSA 公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
关键参数:公钥 PUBLIC_KEY,私钥 PRIVATE_KEY
JS 实现: