手把手教你用C++实现AES的128,192,256位加密以及5种分组模式(未完)

1.前言

你能打开这篇文章,说明你正在学习AES加密法,介绍我就几句话带过了,AES加密法是替代DES加密法而诞生的,在2002年,在5种候选加密法中被选中作为美国的国家标准,其创始人为两个比利时人:Joan Daemen和Vincent Rijmen。需要明确的一点是,他们发明的加密法名为Rijndael,是结合了两人名字命名的,Rijndael并不与AES完全等同,前者支持更广泛的块长度(Nb, number of block)。

本文中我们将只研究AES加密法。

你可能和我一样,搜寻了很多碎片文章,都搞不懂AES到底是怎么回事,这些文章支离破碎,有的代码复制下来却不一定能运行,有的又只支持128位,要改256位就抓瞎了。

  • 本文我将首先带你一步步实现你自己的AES加密法,中间会穿插中间值以方便你校验你正在写的函数是否正确;
  • 之后我会给你提供一些包括查表法在内的加快算法速度的方法;
  • 然后详细讲解5种分组模式是怎么回事;
  • 最后附上我自己的实现。

我推荐你看着算法步骤进行实现,如果你发现哪一步怎么调试都不正确,你可以跳到最后来看我是怎么做的。

1.1 参考文献

为什么我把参考文献放在最前面呢?学习一个东西最好的书籍是教材,而不是网络上的碎片知识。所以我会先给你提供参考文献,如果你看了参考文献也没有搞懂,你可以再来看我的教程。

1.1.1 始祖教程

这篇是两位创始人的文章,是最原汁原味的资料了。
在这里插入图片描述
[1]: Joan Daemen, Vincent Rijmen. AES Proposal: Rijndael[DB/OL]

1.1.2 中文AES教程

因为AES 2002年才生效,所以老点的书是没有的。这本书第11章写了AES加密法的实现,基本上相当于上一个文献的翻译。
在这里插入图片描述
[2]: 迈克尔·威尔森巴赫. 密码学 C/C++语言实现[M]. 机械工业出版社

1.1.3 分组模式

这本《应用密码学》是密码学最经典的著作之一,尤其难得的是作者非常幽默,经常以“防止小孩偷看你的信件”之类的例子来进行阐述。
这本书由于比较老,所以没有AES的内容。第9章讲了几种分组模式,不过他的图片很抽象,我会在下文提供(我认为)更易懂的图片。
在这里插入图片描述
[3]: Brush Schneier. 应用密码学 协议、算法与C源程序[M]. 机械工业出版社

1.1.4 带例子的分组模式文献

这篇文章以AES为加密法叙述了几大模式的实现,难得的是文献的后半部分,整个半本书都是例子,涵盖AES在128,192,256位下5种模式下的加解密结果,可以用来测试。
在这里插入图片描述
[4]: Morris Dworkin. Recommendation for Block Cipher Modes of Operation: Methods and Techniques

加密

待完成

解密

加快速度的方法

5种分组模式

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值