使用AES CTR模式实现任意位置数据加解密

目录

需求

AES加密

CTR模式计数器

完整demo实现

openssl命令行进行验证


需求

最近对我们的项目进行安全优化,我们的服务程序在使用过程中会持续接受客户端的一些数据并追加写到文件中,文件写入完毕后还支持客户端的随机访问来获取这些结构化信息。之前数据的写入都是明文方式,因此考虑使用最广泛使用的AES对称加密来进行处理,我们想到了两种方式进行:1)写入完毕后另起一个线程/进程读文件->加密->写文件->删除旧文件。2)写入数据时就进行加密。第一种方式虽然简单,但是在加密完成前还是存在泄露的风险,因此我们选择第二种方法进行。在实现中发现有以下难点:1)当前加密大都是对完整数据进行,缺少动态数据的加密。2)解密时因为要支持随机访问,所以解密要支持从任何位置的任意长度解密。在对AES的加密学习了解的基础上,最终解决这些问题,在此进行记录。

AES加密

AES加密及模式的学习参考了下面两篇文章:

  1. 一文搞懂对称加密:加密算法、工作模式、填充方式、代码实现:https://juejin.cn/post/7030953914509836296
  2. AES的CTR模式加密解密详解:AES的CTR模式加密解密详解 | Wuman's Blog

其中支持从任意字节解密的模式有ECB、CBC、CFB和CTR,但是ECB不能抵抗重放攻击进行排除,而CBC、CFB在解密时都需要知道前一个分组的密文,在对文件进行随机访问时这需要往前多读取一些数据,使用不方便进行排除,最终只剩下CTR模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值