初识加密算法

最近,出于某些诉求,需要对项目中的密码进行加密传输。之前未接触到这一区域,因此对加密算法做一个初步的了解和总结。

补充说明:项目最终采用的是 RSA 加密算法

对称加密

对称加密(Symmetric Cryptography)算法的加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。其优势在于简单、加解密速度快,但安全性严重依赖于密钥。

对称加密的密钥的大小与加密强度成正比,密钥越大,加密越强,但加解密的时间越慢。因此,密钥的大小在考虑安全性的同时也要兼顾效率,一般小于 256 bit。

对称算法分为两类:一类是对明文中的单个位或字节进行加密的流加密,另一类是将明文进行等长分组并分别进行加密的分组加密。其中分组加密按模式划分为下面五种,模式之间的区别在这就不深入了。

  • ECB 模式:Electronic CodeBook mode(电子密码模式)
  • CBC 模式:Cipher Block Chaining mode(密码分组链接模式)
  • CFB 模式:Cipher FeedBack mode(密文反馈模式)
  • OFB 模式:Output FeedBack mode(输出反馈模式)
  • CTR 模式:CounTeR mode(计数器模式)

另外常见的对称加密算法有:

  • DES
  • 3DES
  • AES
  • TDEA
  • Blowfish
  • RC5
  • IDEA

非对称加密

非对称加密(Asymmetric Cryptography)采用一对密钥(公钥、私钥)对明文进行加解密,公开的密钥为公钥,不公开的密钥为私钥。通过公钥对明文进行加密,然后用私钥进行解密。其相对对称算法而言,在加解密速度上远远慢于对称加密算法,因此一般用它做少量的数据加密,更多的是用于数字签名和认证。

其实在非对称加密中,公钥和私钥都可以用于加解密,只要保证 A 加密,用 B 能解密就行。至于 A 和 B 谁是公钥,根据不同的用途来定。

  • 加密
    • B 通过公钥对发送的信息进行加密
    • A 采用私钥对信息进行解密
  • 数字签名
    • A 对信息原文进行一次哈希(md5、sha1 等),并用私钥加密这段哈希作为签名
    • A 将信息原文和签名一起发送出去
    • B 用公钥解密签名,如果解密成功且解密出来的哈希值与信息原文一致,那么就可以确保信息的完整性和真实性
  • 认证:以常见的数字证书(Digital Certificate)认证为例,CA(Certificate Agent) 中存放 A、B 数字证书,在数字证书里包含有各自的公钥与加密算法
    • A 向 CA 请求 B 的数字证书
    • CA 对 B 的数字证书做一次哈希,并用私钥加密这段哈希,生成数字签名
    • CA 将 B 的数字证书和上面生成的数字签名一起发送给 A
    • A 通过 CA 的公钥加密 CA 发送的内容得到一个哈希,同时在接收到的 B 的数字证书进行一次哈希,如果两个哈希值一样,则表明 B 的数字证书可靠
    • A 请求认证 B,B 用自己的私钥加密自己的身份信息并发送给 A,
    • A 用上面获取到的 B 的数字证书中的公钥解密 B 发送的信息,如果解密成功,则代表认证成功
    • 反之,B 认证 A 的过程也一样

常见的非对称加密算法有:

哈希算法

哈希算法(Hash function)通过散列函数将信息(明文)压缩为特定长度的唯一的哈希值(密文),明文中的任何微小变化都会导致密文的变动。

哈希算法特别之处在于它是单向算法,无法通过密文反推明文。一般用于生成信息摘要(验证信息的完整性)或者密文存储及验证密码(哈希算法 + salt)。

常见的哈希算法有:

  • MD2、MD4、MD5
  • SHA-0、SHA-1、SHA-256、SHA-512

参考