目录

AES算法(七)实战准备

目录

AES 算法适合什么场景?

首先先明确一下,AES 算法属于对称密码算法,也就是说 解密 和 解密 需要使用相同的密钥,加密速度较非对称密码算法要快,但是安全性较低。因为要使用相同的密钥加密解密,所以如果加密解密者都是自己,使用 AES 算法就非常合适了,比如存储用户的一些隐私数据(密码一般不用对称算法),该类数据需要在特定场景拿出解密给用户自己查看。

AES 算法参数准备

由之前理论可知,AES 算法的工作模式和填充方式决定了所需要的参数,如果是和第三方系统对接,需要提前确认以下参数:

  • 明文(P):
    • 加密方需要
  • 密文(C):
    • 解密方需要
  • 密钥(Key)
    • 所有工作模式都需要
    • 加密、解密双方必须使用相同的密钥
    • 密钥长度可选:128 Bit(16 字节)、192 Bit(24 字节)、256 Bit(32 字节)
    • 密钥长度越长越安全,但是加密速度会越慢(轮函数迭代次数会增多)
  • 数据填充模式(M)
    • ECB、CBC 两种工作模式需要
    • 加密、解密双方必须使用相同的数据填充模式
  • 初始向量(IV)
    • CBC、CFB、OFB、CTR、GCM 工作模式需要
    • 加密、解密双方必须使用相同的初始向量
    • IV 长度应该跟分组大小一致,AES 标准算法分组大小 128 Bit,那么所需要的 IV 长度就是 16 字节(128 Bit)
    • IV 长度如果不是 16 字节,不同的加密库实现方式可能不会一样,则会导致不一样的加密结果,很多时候加密、解密出问题就是这里的问题
  • 附加消息(F)
    • GCM 工作模式需要

AES 算法加密的步骤

AES 算法是一种分组密码算法(Block cipher),所有的分组密码算法都是按照以下步骤加密的:

  • 加密步骤一:将明文拆分为 N 个固定长度的明文块
  • 加密步骤二:用相同的秘钥和算法对每个明文块加密得到 N 个等长的密文块
  • 加密步骤三:然后将 N 个密文块按照顺序组合起来得到密文

AES 算法需要注意的问题

  • 加密算法加密出来的密文一般是以字节块的形式给出,我们经常会将密文块转成字符串的形式便于存储
    • 常用的两种形式是 Base64 或者 Hex 方式,注意区别,解密的时候要使用相应的方式反转成密文块,否则会导致解密失败
  • Key 和 IV 如果丢失或者公开,可能会造成安全问题