1 / 80
文档名称:

(参考)AES原理及其在c语言上的实现.docx

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

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

分享

预览

(参考)AES原理及其在c语言上的实现.docx

上传人:1017848967 2016/7/3 文件大小:0 KB

下载得到文件列表

(参考)AES原理及其在c语言上的实现.docx

相关文档

文档介绍

文档介绍:AES 加密解密算法及其在 c 语言上的实现引言对称密码算法主要用于保证数据的机密性, 通信双方在加密/ 解密过程中使用它们共享的单一密钥。对称密码算法的使用相当广泛, 密码学界已经对它们进行了深入的研究[1] 。最常用的对称密码算法是数据加密标准(DES) 算法, 它是由 IBM 在美国国家安全局(NSA) 授意之下研制的一种使用 56 位密钥的分组密码算法。自 1977 年公布成为美国政府的商用加密标准以来已使用 20 多年[2] 。 DES 的主要问题是其密钥长度较短, 已不适合于当今分布式开放网络对数据加密安全性的要求。在 DES 每隔五年的评估会议中, 最后一次在 1998 年美国政府终于决定不再继续延用 DE S 作为联邦加密标准, 也就表明了 DES 将退出加密标准的舞台, 而新的标准 AES(AdvancedEncryptionStandard ) 将粉墨登场[3] 。 AES 是美国国家标准技术研究所 NIST 旨在取代 DES 的新一代的加密标准[3 ~ 5] 。 NIST 对 AES 候选算法的基本要求是: 对称分组密码体制; 密钥长度支持 128,192,25 6 位; 明文分组长度 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], 但总体来说,Rijndael 作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。 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 长度有限, 所以在 AE S 中要用一个密钥扩展程序( KeyExpansion) 把外部密钥K 扩展成更长的比特串, 以生成各轮的加密密钥。 AE S 的加密与解密框图如图1所示。 AES 加密与解密流程图 128 位数据分组与扩展秘钥的异或运算 S 盒变换行变换列变换与扩展秘钥的异或 S 盒变换与扩展秘钥的异或运算输出 128 位数据行变换 128 位数据分组与扩展秘钥的异或运算反S 盒变换反列变换反行变换与扩展秘钥的异或反S 盒变换反行变换与扩展秘钥的异或运算输出 128 位数据(1) 加密变换设X是 AE S的 128 比特明文输入,Y是 128 比特的密文输出,则 AE S密文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: 列置换。'(x) (x) (x) s a s ? ? 0, 0, 1, 1, 2, 2, 3, 3, ' 02 03 01 01 ' 01 02 03 01 ' 01 01 02 03 ' 03 01 01 02 c