前几天了解了一下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。