AES/CBC/PKCS7Padding加密的实现
2015-07-20 16:51
AES
加密
CBC
PKCS7Padding
摘要:项目里用到了 AES/CBC/PKCS7Padding 加密,梳理一下实现原理和完整流程,包括密钥 hash、IV 截取、填充和 Base64 编码。
前几天了解了一下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。