AES/CBC/PKCS7Padding加密的实现

前几天了解了一下AES/CBC/PKCS7Padding加密,在网上搜了搜,垃圾文章太多了,就一篇文章Copy过来Copy过去,看到的都是一样的。相信很多朋友有同样的感受,于是我将我当时总结的一些东西整理一下,写在我的博客里,希望能帮助到有需要的朋友。

在一些情况下,客户端和服务端通信的时候需要加密,来增强数据的安全性。今天介绍一种较常用的方法,AES加密算法,加密模式为CBC,填充模式为PKCS7Padding。
如果对这些不熟悉的话,请自行Google或wikipedia。
加密过程如下:

  • 用户提供加密秘钥
  • 对用户秘钥hash256成2进制32 bytes
  • 截取上一步结果的前16 bytes作为AES IV
  • 按PKCS7Padding对需要加密的数据进行填充
  • 按CBC模式对数据进行加密
  • 加密后的字节码使用Base64转换成字符串

解密过程如下:

  • 用户提供解密秘钥
  • 对用户秘钥hash256成2进制32 bytes
  • 截取上一步结果的前16 bytes作为AES IV
  • 对加密的字符串base64_decode成字节码
  • 按CBC模式对加密数据进行解密
  • 按PKCS7Padding去掉填充的数据得到明文

简单的讲,整个正反向过程是这样的:
加密:Padding->CBC加密->Base64编码
解密:Base64解码->CBC解密->Unpadding

我已经将实现的代码放在了Github上,有PHP和Python两个版本。
https://github.com/gunnzhao/AES-CBC-PKCS7Padding-

刚接触的人可能会疑惑,在网上搜到好多是AES/CBC/PKCS5Padding不是PKCS7Padding,PKCS5Padding和PKCS7Padding的区别是什么,希望这篇文章能帮助到你PKCS7Padding & PKCS5Padding

发表评论

电子邮件地址不会被公开。 必填项已用*标注