加密算法
常见的加密算法从简单到复杂可以分为一下几类
- Base64 编码
- 简单的字符串压缩
- 特殊字符通过 Base64 编码后进行参数传递可以免去转义的处理
- 单项散列函数: MD5、SHA1、SHA256…这类算法可以默认当作是不可逆的(这个说法并不绝对,比如彩虹表攻击)
- 信息摘要: 比如将一个视频文件转换成一个 128 bit 的 MD5 码作为标识
- 加密: 比如将明文密码 MD5 后存到数据库里面,虽然你并不知道用户名的密码,但是你依然可以校验用户密码对不对。
- 消息认证码: HMAC-MD5、HMAC-SHA256…对单项散列函数的功能性增强,在散列过程中加入只有通信双方知道的 Secret,Signature = Hash(Data, Secret),传递数据的同时把签名也加上,接收方算一下签名对比一下就知道数据是不是被篡改了。
- 签名算法: 在 JWT 里面,用来校验明文数据是否被篡改。JWT 有 Header.Payload.Signature 三部分构成,其中 Header 和 Payload 都是 Base64URL 编码压缩的字符串,其实就相当于明文,默认是不会加密的。
- 对称加密: DES、3DES、AES。加密方和解密方使用相同的密钥,因此叫对称加密。对称加密是可逆的,可以解密。对称加密最大的缺点是密钥安全性,如果在多方同步密钥的过程中被截获,就失去加密的意义了。
- 适用于基础的数据加解密场景,只要有方式避免密钥泄漏,也是没什么问题的
- 非对称加密: RSA,非对称加密主要是解决对称加密的痛点的,非对称加密有一对密钥,公钥加密,私钥解密。公钥随便传,谁都可以拿到,私钥只有解密方自己有。
- 数字签名:
- 证书: