# 对称加密(Symmetric Cryptography)

定义:用同样的秘钥或算法,进行数据加密和解密。

# 常见场景:登录时的账号密码,base64转码。

缺点:

  • 不安全,在客户端和服务器间使用对称加密几乎等同于裸奔。
  • 因为这个秘钥必须在客户端和服务器间互传一次,大家才能进行数据加密和解密。

优点:

  • 加密和解密过程简单,速度快。
  • 在不泄露秘钥的情况下,加密效果还是可以的。

# 包含

AES,DES,3DES

# 非对称加密(Asymmetric Cryptography)

定义:

  • 使用一对秘钥(公钥和私钥)。

  • 私钥不公布,仅服务器知道。公钥可公布。

  • 公钥进行加密,私钥进行解密。

模拟过程:

  1. 服务器有一对秘钥(公钥与私钥)
  2. 服务器将公钥公布给客户端
  3. 客户端使用公钥进行数据加密,传输给服务器
  4. 在数据传输过程中,加密数据无法被解密,因为私钥不公布

# 常见场景:对接网络支付,代码仓库托管。

缺点:

  • 公钥有可能被篡改。
  • 解密过程相对复杂,速度慢。

优点:

  • 相对安全。

# 衍生的场景:数字签名(apk应用签名)

  1. 权威机构给应用开发者一对秘钥(公钥和私钥)
  2. 开发者在平台上设置公钥(公布公钥)
  3. 开发者使用私钥,进行apk签名(某种算法 + 私钥 = 签名)
  4. 开发者将已签名好的apk上传到平台
  5. 平台使用公钥解密签名,如果能解密,说明apk包没有被篡改,合法。否则不合法。

能否使用公钥签名,私钥解签? 不能,公钥是公布的,任何人都可以使用这个公钥签名。

# 包含

RSA,DSA,ECC、Elgamal、背包算法、Rabin、Diffie-Hellman、ECC(椭圆曲线加密算法)。

# 散列算法

几种线性散列算法(签名算法):MD5,SHA1,HMAC

这几种算法只生成一串不可逆的密文,经常用其效验数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,若相同算法生成的密文不同,则证明传输数据进行过了修改。通常在数据传说过程前,使用MD5和SHA1算法均需要发送和接收数据双方在数据传送之前就知道密匙生成算法,而HMAC与之不同的是需要生成一个密匙,发送方用此密匙对数据进行摘要处理(生成密文),接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。

# 补充

四:Https 实现方式 对称加密+非对称加密(会话密钥模式)

常用算法:AES+RSA

流程:

1:后端生成公钥,私钥保存

2:前端获取公钥,保存

3:前端会话前获取随机数,并通过公钥加密后作为会话密钥对数据进行对称加密后传输给后端

4:后端获取到加密会话密钥 通过私钥解密出真正的会话密钥,返回数据时通过真正的会话密钥对数据加密

5:前端获得后端返回的加密数据通过自己之前随机生成的会话密钥解密数据

优点:数据提交跟返回都是密文,且密钥是会话时随机生成并非直接保存在前端不变,不易泄露,保证提交数据跟返回数据都是加密,安全的

缺点:多次加密解密,相对比较耗cpu