常用的加密算法总体可以分为两类:单向加密双向加密,双向加密又分为对称加密非对称加密,因此主要分析下面三种加密算法:对称加密算法、非对称加密算法和单向加密算法(Hash算法)。

双向加密

对称加密算法(AES、DES、3DES、PBE)

  • AES:(Advanced Encryption Standard), 高级加密算法,这个标准用来替代DES。
  • DES:(Data Encryption Standard),即数据加密算法。
  • 3DES:(Triple DES),即三重数据加密算法,是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
  • PBE:(Password-based encryption),即基于密码验证。
  • 对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。
  • AES加密算法是密码学中的高级加密标准,采用的是对称分组密码体制,密钥长度的最少支持为128。AES加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界使用。
  • 优点:加密速度快。
  • 缺点:密钥的传递和保存是一个问题,参与加密和解密的双方使用的密钥是一样的,这样密钥就很容易泄露。

非对称加密算法(RSA、DSA、DH、ECC)

  • RSA:(算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman),即
  • DSA:(Digital Signature Algorithm),即数字签名。
  • DH:(Diffie-Hellman),即密钥一致协议。
  • ECC:(Elliptic Curves Cryptography),即椭圆曲线密码编码学。
  • 非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密也叫公钥加密,是可逆的(即可解密)。
  • RSA加密算法是基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解极其困难,因此可以将乘积公开作为加密密钥。虽然RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击至今未被完全攻破。
  • 优点:加密和解密的密钥不一致,公钥是可以公开的,只需保证私钥不被泄露即可,这样就密钥的传递变的简单很多,从而降低了被破解的几率。
  • 缺点:加密速度慢
  • RSA加密算法既可以用来做数据加密,也可以用来数字签名

    数据加密过程:发送者用公钥加密,接收者用私钥解密(只有拥有私钥的接收者才能解读加密的内容)

数字签名过程:甲方用私钥加密,乙方用公钥解密(乙方解密成功说明就是甲方加的密,甲方就不可以抵赖)

单向加密算法(MD5、SHA、HMAC、BASE64)

MD5(Hash加密算法)

  • MD5:(Message-Digest Algorithm 5),即信息摘要算法5。
  • 单向的算法不可逆(被MD5加密的数据不能被解密)。MD5加密后的数据长度要比加密数据小的多,且长度固定,且加密后的串是唯一的。
  • 适用场景:常用在不可还原的密码存储信息完整性校验等。
  • 信息完整性校验:典型的应用是对一段信息产生信息摘要,以防止被篡改。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

SHA加密算法

  • SHA:(Secure Hash Algorithm),即安全散列算法。
  • 数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了,但是SHA仍然是公认的安全加密算法,较之MD5更为安全。

HMAC加密算法

  • HMAC:(Hash Message Authentication Code),即散列消息鉴别码。
  • 基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

Base64

  • 严格意义讲,Base64并不能算是一种加密算法,而是一种编码格式,是网络上最常见的用于传输8bid字节代码的编码方式之一。
  • Base64编码可用于在HTTP环境下传递较长的标识信息,Base编码不仅不仅比较简单,同时也据有不可读性(编码的数据不会被肉眼直接看到)。

混合加密

  • 由于以上加密算法都有各自的缺点(RSA加密速度慢、AES密钥存储问题、MD5加密不可逆),因此实际应用时常将几种加密算法混合使用。
  • 例如:RSA+AES
    • 采用RSA加密AES的密钥,采用AES对数据进行加密,这样集成了两种加密算法的优点,既保证了数据加密的速度,又实现了安全方便的密钥管理。
    • 那么,采用多少位的密钥合适呢?一般来讲密钥长度越长,安全性越高,但是加密速度越慢。所以密钥长度也要合理的选择,一般RSA建议采用1024位的数字,AES建议采用128位即可。

算法实现

各种Java加密算法的实现