1 / 23
文档名称:

AES原理及其在c语言上的实现.docx

格式:docx   大小:112KB   页数:23页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

AES原理及其在c语言上的实现.docx

上传人:guoxiachuanyue 2021/4/12 文件大小:112 KB

下载得到文件列表

AES原理及其在c语言上的实现.docx

文档介绍

文档介绍:AES加密解密算法及其在 c语言上的实现
引言
对称密码算法主要用于保证数据的机密性 ,通信双方在加密 / 解密过程中使用它们共享的单
一密钥。 对称密码算法的使用相当广泛 ,密码学界已经对它们进行了深入的研究 [1] 。最常用 的对称密码算法是数据加密标准 (DES) 算法,它是由 IBM 在美国国家安全局 (NSA) 授意之下 研制的一种使用 56 位密钥的分组密码算法。自 1977 年公布成为美国政府的商用加密标准 以来已使用20多年[2]。DES的主要问题是其密钥长度较短 ,已不适合于当今分布式开放网 络对数据加密安全性的要求。在 DES 每隔五年的评估会议中 ,最后一次在 1998 年美国政府
终于决定不再继续延用 DES乍为联邦加密标准,也就表明了 DES将退出加密标准的舞台,而新 的标准AES(AdvancedEncryptionStandard )将粉墨登场[3]。AES是美国国家标准技术研究所 NIST旨在取代DES的新一代的加密标准[3〜5]。NIST对AES候选算法的基本要求是:对称分 组密码体制 ;密钥长度支持 128,192,256 位;明文分组长度 128 位;算法应易于各种硬件和软件 实现。1998年NIST开始AES第一轮征集、分析、测试,共产生了 15个候选算法。1999年3 月完成了第二轮 AES 的分析、 测试。 1999 年 8 月 NIST 公布了五种算法 (MARS,RC6,Rijndael,Serpent,Twofish) 成为候选算法。最后 ,Rijn2dael[5] ,这个由比利时人设计 的算法与其它候选算法在成为高级加密标准 (AES) 的竞争中取得成功 ,于 2000 年 10 月被 NIST宣布成为取代 DES的新一代的数据加密标准,即AES尽管人们对 AES还有不同的看法 [6〜8],但总体来说,RijndaeI作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、 易用和灵活等优点。AES设计有三个密钥长度:128,192,256比特,相对而言,AES的128比特 密钥比DES的56比特密钥强1021倍[4]。
AES 加密 / 解密算法原理
对称密码算法根据对明文消息加密方式的不同可分为两大类 ,即分组密码和流密码。分组密
码将消息分为固定长度的分组 ,输出的密文分组通常与输入的明文分组长度相同。 AES算法属
于分组密码算法 ,它的输入分组、输出分组以及加 / 解密过程中的中间分组都是 128 比特。 密钥的长度K为128,192或256比特。用Nk=4,6,8代表密钥串的字数(1字=32比特),在本 文编制的程序中由用户选定。 用 Nr 表示对一个数据分组加密的轮数 (加密轮数与密钥长度的 关系见表1)。每一轮都需要一个和输入分组具有同样长度 (128比特)的扩展密钥 Ke的参
与。由于外部输入的加密密钥 K长度有限,所以在AES中要用一个密钥扩展程序 (KeyExpansion) 把外部密钥K扩展成更长的比特串,以生成各轮的加密密钥。AES的加密与解密框图如图 1所 示。
128位数据
分组

与扩展秘钥的异或运算
S盒变换 二
行变换
列变换
与扩展秘钥的异或
AES加密与解密流程图
(1)加密变换
设X是AES的128比特明文输入,丫是128比特的密文输出,则AES密文Y可以用下面的复合
变换表示:
Y=A k(r+1 )• R • S- Akr • C • R • S • Ak(r21) • ? • C • R • S • Ak1(X)
其中“ •”表示复合运算。这里 Aki :表示对X的一个变换 Aki (X) =X= Y Ki ( Ki为第i轮的子 密钥,为比特串的异或运算)。S:S盒置换。即对每一个字节用 S2Box做一个置换。S2Box是
一个给定的转换表。
R:行置换。C:列置换。s'(x) =a(x) : s(x)
s'0,c 02 03 01 01 S0,c
s'1,c
01 02 03 01
si,c
s'2,c
01 01 02 03
s2,c
l
03 01 01 02 _
s3,c
这里二是特殊的乘法运算,将在下面详细介绍。
(2)解密变换
解密变换是加密变换的逆变换,这里不再详述。
AES加密/解密算法的实现
分组加密
表1是三种不同类型的 AES加密密钥分组大小与相应的加密轮数