AES加密、解密算法原理
A E S 加 密 算 法 的 原 理 详 解

AES加密算法原理AES加密算法原理AES是作为DES的替代标准出现的,全称Advanced Encryption Standard,即:高级加密标准。
AES加密算法,经历了公开的选拔,最终2000年,由比利时密码学家Joan Daemen和Vincent Rijmen设计的Rijndael算法被选中,成为了AES标准。
AES明文分组长度为128位,即16个字节,密钥长度可以为16个字节、24个字节、或32个字节,即128位密钥、192位密钥、或256位密钥。
总体结构AES中没有使用Feistel网络,其结构称为SPN结构。
和DES相同,AES也由多个轮组成,其中每个轮分为SubBytes、ShiftRows、MixColumns、AddRoundKey 4个步骤,即:字节代替、行移位、列混淆和轮密钥加。
根据密钥长度不同,所需轮数也不同,128位、192位、256位密钥,分别需要10轮、12轮和14轮。
第1轮之前有一次AddRoundKey,即轮密钥加,可以视为第0轮;之后1至N-1轮,执行SubBytes、ShiftRows、MixColumns、AddRoundKey;最后一轮仅包括:SubBytes、MixColumns、AddRoundKey。
AES总体结构示意图:加密整体流程加密的代码实现:func encryptBlockGo(xk []uint32, dst, src []byte) {var s0, s1, s2, s3, t0, t1, t2, t3 uint32--按4x4矩阵排列s0 = uint32(src[0])24 | uint32(src[1])16 | uint32(src[2])8 | uint32(src[3])s1 = uint32(src[4])24 | uint32(src[5])16 | uint32(src[6])8 | uint32(src[7])s2 = uint32(src[8])24 | uint32(src[9])16 | uint32(src[10])8 | uint32(src[11])s3 = uint32(src[12])24 | uint32(src[13])16 | uint32(src[14])8 | uint32(src[15])-- 第1次轮密钥加s0 ^= xk[0]s1 ^= xk[1]s2 ^= xk[2]s3 ^= xk[3]--nr为中间重复轮数--例如128位密钥,44字子密钥,此处为9轮---2位去除开头和结尾轮nr := len(xk)-4 - 2--4表示已使用了4个字子密钥for r := 0; r nr; r++ {--此处代码包括字节代替、行移位、列混淆、轮密钥加t0 = xk[k+0] ^ te0[uint8(s024)] ^ te1[uint8(s116)] ^ te2[uint8(s28)] ^ te3[uint8(s3)]t1 = xk[k+1] ^ te0[uint8(s124)] ^ te1[uint8(s216)] ^ te2[uint8(s38)] ^ te3[uint8(s0)]t2 = xk[k+2] ^ te0[uint8(s224)] ^ te1[uint8(s316)] ^ te2[uint8(s08)] ^ te3[uint8(s1)]t3 = xk[k+3] ^ te0[uint8(s324)] ^ te1[uint8(s016)] ^ te2[uint8(s18)] ^ te3[uint8(s2)]s0, s1, s2, s3 = t0, t1, t2, t3--最后一轮仅包括字节代替、行移位、轮密钥加--此处为字节代替和行移位s0 = uint32(sbox0[t024])24 | uint32(sbox0[t1160xff])16 | uint32(sbox0[t280xff])8 | uint32(sbox0[t30xff])s1 = uint32(sbox0[t124])24 | uint32(sbox0[t2160xff])16 | uint32(sbox0[t380xff])8 | uint32(sbox0[t00xff])s2 = uint32(sbox0[t224])24 | uint32(sbox0[t3160xff])16 | uint32(sbox0[t080xff])8 | uint32(sbox0[t10xff])s3 = uint32(sbox0[t324])24 | uint32(sbox0[t0160xff])16 | uint32(sbox0[t180xff])8 | uint32(sbox0[t20xff])--轮密钥加s0 ^= xk[k+0]s1 ^= xk[k+1]s2 ^= xk[k+2]s3 ^= xk[k+3]dst[0], dst[1], dst[2], dst[3] = byte(s024), byte(s016), byte(s08), byte(s0)dst[4], dst[5], dst[6], dst[7] = byte(s124), byte(s116), byte(s18), byte(s1)dst[8], dst[9], dst[10], dst[11] = byte(s224), byte(s216), byte(s28), byte(s2)dst[12], dst[13], dst[14], dst[15] = byte(s324), byte(s316), byte(s38), byte(s3)密钥扩展Nk表示初始密钥的字数,一个字为4个字节,以16字节初始密钥为例,初始密钥共计4个字。
信息安全:RSA加密和AES加密的比较

信息安全:RSA加密和AES加密的比较RSA加密和AES加密是目前常用的两种加密算法,它们都是保护信息安全的重要手段。
本文将从加密原理、加密过程、安全性等多方面进行比较,以便读者更好地了解它们的异同及优缺点。
1. RSA加密原理RSA加密算法是由三位数学家Rivest、Shamir和Adleman创立的,是一种非对称加密算法。
其原理是利用两个质数的乘积作为公开的密钥,而私钥是两个质数的积的质因数分解。
RSA加密算法的加密过程为:明文通过公钥加密成密文,密文通过私钥进行解密还原为明文。
2. AES加密原理AES(Advanced Encryption Standard)是一种对称加密算法,其加密和解密所用的密钥相同,因此安全性取决于密钥的保密程度。
AES算法通过一系列加密轮进行加密,每轮有四个步骤:字节替换、行移位、列混淆和轮密钥加。
随着加密轮的增加,AES算法的复杂度也会相应增加。
3.加密过程比较RSA加密算法是非对称加密算法,加密和解密所用的密钥不同,因此需要先进行密钥交换。
具体的加密过程为:首先生成一对公私钥对,公钥用于加密,私钥用于解密。
发送方将明文通过公钥加密成密文,然后将密文发送给接收方。
接收方使用私钥解密密文还原成明文。
而AES算法是对称加密算法,加密和解密用的是同一个密钥,所以在加密和解密时无需进行密钥交换,也就是流程相对简单。
4.安全性比较RSA算法具有很好的安全性,其安全性取决于密钥的长度,常见的密钥长度为2048位或4096位。
由于其加密和解密所用的密钥不同,因此有效避免了密钥泄露带来的风险,但由于密钥长度较长,加解密速度较慢,且在大数据量情况下,加密效率有所降低。
AES算法也有较高的安全性,但其密钥长度通常为128位、192位或256位,因此相对于RSA算法来说,密钥的长度较短,存在密钥泄露的风险。
但由于是对称加密算法,因此加解密速度较快,适合大数据量加密需求。
5.选择哪种算法在具体应用中,RSA算法常用于数字签名、密钥交换等场合,它可以较好地保证数据的安全性,并有效避免密钥泄露带来的风险。
毕业设计论文AES加密算法

毕业设计论文AES加密算法摘要随着信息技术的快速发展,人们对数据安全问题的关注日益增加。
AES(Advanced Encryption Standard)是目前应用最广泛的对称加密算法之一,被广泛应用于保护数据的机密性。
本文主要探讨了AES加密算法的原理、过程及其在信息安全中的应用,以期提高数据的安全性。
1.引言随着网络的迅猛发展,信息的传输已经成为我们日常生活中不可或缺的一部分。
然而,信息的传输安全问题也愈发凸显,特别是在敏感信息的保护方面。
因此,保护信息安全和隐私已成为重要的议题。
2.AES加密算法的选择和设计AES加密算法是由美国国家标准与技术研究院(NIST)制定的一种对称加密算法。
与其他对称加密算法相比,AES算法在安全性和效率方面表现更优秀。
在选择AES算法时,需要考虑加密算法的安全性、性能和算法的复杂度等因素。
3.AES加密算法的原理AES加密算法采用分组密码的方式,将明文按照一定的分组长度进行分组,再对每个分组进行轮函数的处理。
在AES算法中,明文分组长度为128位,密钥长度为128、192或256位。
AES算法由四个基本的运算模块构成,包括字节代换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。
4.AES加密算法的过程在AES加密算法的过程中,首先需要进行密钥的扩展,根据密钥的长度生成多轮的轮密钥。
然后,对明文进行分组、轮函数的处理和轮密钥加操作。
最后得到密文。
5.AES加密算法的应用AES加密算法广泛应用于各个领域,特别是在信息安全领域。
在网络通信中,AES算法被用于保护数据的机密性,防止数据被非法获取。
在存储介质中,AES算法可以被用于加密存储的数据,确保数据的安全性。
此外,AES算法还广泛应用于数字版权保护、无线通信和智能卡等领域。
6.AES加密算法的优化和改进尽管AES加密算法在安全性和效率方面表现出色,但仍有一些改进和优化的空间。
AES加密解密算法原理

AES加密解密算法原理AES(Advanced Encryption Standard)是一种对称加密算法,也是目前最常用的加密算法之一、它的原理基于代换-置换网络(Substitution-Permutation Network)和密钥编排(Key Schedule),提供了高度安全性和高效的加密解密速度。
AES算法使用固定长度的块(block)进行加密和解密。
在AES中,块的长度为128位(16字节),可以通过使用不同的密钥长度(128位、192位或256位)来选择不同的加密强度。
AES加密算法的核心是代换-置换网络(Substitution-Permutation Network,SPN)。
它包含了四个主要的操作:字节代换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。
这些操作在多轮中重复执行,每轮中使用不同的轮密钥进行加密。
最后一轮的加密不包含列混淆操作。
字节代换(SubBytes)是AES算法的第一步,它通过查表的方式将输入块中的每个字节替换为一个固定的字节。
这个替换表是通过将每个字节的高四位和低四位作为下标进行查找得到的。
行移位(ShiftRows)是AES算法的第二步,它按照固定规则对输入块中的每一行进行循环移位操作。
具体来说,每一行的移位操作是将这一行向左循环移动一个固定的偏移量。
这个偏移量是根据输入块的行号来确定的。
列混淆(MixColumns)是AES算法的第三步,它对输入块中的每一列进行混淆操作。
这个混淆操作是通过将每一列的每个字节与一个固定的矩阵进行矩阵乘法得到的。
轮密钥加(AddRoundKey)是AES算法的最后一步,它是每一轮加密中的一个重要操作。
在这个操作中,当前输入块的每个字节与当前轮使用的轮密钥进行异或操作。
这个轮密钥是通过密钥编排算法生成的。
密钥编排(Key Schedule)是AES算法的一个重要部分。
AES算法加解密原理及安全性分析(DOC)

AES算法加解密原理及安全性分析刘帅卿一、AES算法简介AES算法是高级加密标准算法的简称,其英文名称为Advanced Encryption Standard。
该加密标准的出现是因为随着对称密码的发展,以前使用的DES(Data Encryption Standard数据加密标准)算法由于密钥长度较小(56位),已经不适应当今数据加密安全性的要求,因此后来由Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。
AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。
与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。
通过分组密码返回的加密数据的位数与输入数据相同。
迭代加密使用一个循环结构,在该循环中重复置换(permutations)和替换(substitutions)输入数据。
加之算法本身复杂的加密过程使得该算法成为数据加密领域的主流。
二、AES算法的基本概念1、有限域(GF)由于AES算法中的所有运算都是在有限域当中进行的,所以在理解和实现该算法之前先得打好有限域这一基石才行。
通常的数学运算都是在实数域中进行,而AES算法则是在有限域中进行,我们可以将有限域看成是有确定边界范围的正整数集合,在该集合当中,任意两个元素之间的运算结果都仍然落在该集合当中,也即满足运算封闭性。
那么如何才能保证这样的“有限性”(也即封闭性)呢?GF(2w)被称之为伽罗华域,是有限域的典型代表。
随着w(=4,8,16,…)的取值不同所形成的有限域范围也不同。
AES算法中引入了GF域当中对数学运算的基本定义:将两数的加减法定义为两者的异或运算;将两数的乘法定义为多项式间的相乘并求余运算,其中被用于求余运算的除数被称为不可约多项式(或者称为求余多项式),它是固定的一个多项式:m(x) =8431x x x x ++++(数值为十六进制的11B ,这里是假定w=8时的情形)。
AES加密技术简介

AES加密技术2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种侯选算法中选出的一项新的密匙加密标准。
Rijndael被选中成为将来的AES。
Rijndael是在1999 年下半年,由研究员Joan Daemen 和Vincent Rijmen 创建的。
AES 正日益成为加密各种形式的电子数据的实际标准。
美国标准与技术研究院(NIST) 于2002 年5 月26 日制定了新的高级加密标准(AES) 规范。
算法原理AES 算法基于排列和置换运算。
排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。
AES 使用几种不同的方法来执行排列和置换运算。
AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和256 位密钥,并且用128 位(16字节)分组加密和解密数据。
与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。
通过分组密码返回的加密数据的位数与输入数据相同。
迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。
AES与3DES的比较算法名称算法类型密钥长度速度解密时间(建设机器每秒尝试255个密钥)资源消耗AES对称block密码128、192、256位高1490000亿年低3DES对称feistel密码112位或168位低46亿年中--------------------------------------------------------------------------------------------------------------------------------------(/feel22/blog/item/b54d21fa745afe9358ee9069.html)关键词:AES算法DES AVR汇编语言加密算法解密算法引言随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。
AES算法详解

AES算法详解AES算法简介 AES的全称是Advanced Encryption Standard,意思是⾼级加密标准。
AES密码分组⼤⼩和密钥⼤⼩可以为128位、192位和256位。
然⽽AES只要求分组⼤⼩为128位。
本⽂只对分组⼤⼩128位,密钥长度也为128位的Rijndael算法进⾏分析。
密钥长度为192位和256位的处理⽅式和128位的处理⽅式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。
AES算法使⽤逻辑就是:发送⽅将要发送的明⽂数据X使⽤秘钥K进⾏AES加密后会得到密⽂Y,将密⽂进⾏⽹络传输,接受⽅在收到密⽂Y后使⽤秘钥K进⾏AES解密后技能得到明⽂X,这样即使密⽂Y在⽹络上传输时被截获了,没有秘钥也难以破解其真实意思。
AES算法相关数学知识 在AES算法中的MixColumn层中会⽤到伽罗⽡域中的乘法运算,⽽伽罗⽡域的运算涉及⼀些数学知识如下:素域: 有限域有时也称伽罗⽡域,它指的是由有限个元素组成的集合,在这个集合内可以执⾏加、减、乘和逆运算。
⽽在密码编码学中,我们只研究拥有有限个元素的域,也就是有限域。
域中包含元素的个数称为域的阶。
只有当m是⼀个素数幂时,即m=p n(其中n为正整数是p的次数,p为素数),阶为m的域才存在。
p称为这个有限域的特征。
也就是说,有限域中元素的个数可以是11(p=11是⼀个素数,n=1)、可以是81(p=3是⼀个素数,n=4)、也可以是256(p=2是⼀个素数,n=8).....但有限域的中不可能拥有12个元素,因为12=2·2·3,因此12也不是⼀个素数幂。
有限域中最直观的例⼦就是阶为素数的域,即n=1的域。
的元素可以⽤整数0、1、...、p-1l来表⽰。
域的两种操作就是模整数加法和整数乘法模p。
加上p是⼀个素数,整数环Z表⽰为GF(p),也成为拥有素数个元素的素数域或者伽罗⽡域。
aes cbc算法原理

AES CBC算法原理1. 引言AES(Advanced Encryption Standard)是一种对称加密算法,被广泛应用于数据的加密和解密过程中。
CBC(Cipher Block Chaining)是一种工作模式,用于将AES算法应用于加密大块数据。
在本文中,我们将详细介绍AES CBC算法的基本原理,包括AES算法、CBC工作模式以及它们的结合应用。
2. AES算法AES是一种分组密码,它使用相同长度的密钥对数据进行加密和解密。
AES有三个固定的密钥长度:128位、192位和256位。
根据不同的密钥长度,AES算法分为AES-128、AES-192和AES-256。
AES算法将明文分割成固定长度的块(128位),每个块独立地进行加密或解密操作。
其基本原理如下:1.字节替代(SubBytes):将每个字节替换为S盒中对应位置上的元素,S盒是一个固定的非线性变换表。
2.行移位(ShiftRows):对每行进行循环左移操作,第一行不移动,第二行左移1字节,第三行左移2字节,第四行左移3字节。
3.列混淆(MixColumns):对每列进行线性变换,通过乘法和加法操作,达到扩散效果。
4.轮密钥加(AddRoundKey):将当前轮次的密钥与明文进行异或操作。
AES算法是一个迭代的过程,每一轮都会对数据进行上述四个基本操作。
具体的迭代次数取决于密钥长度,例如AES-128有10轮、AES-192有12轮、AES-256有14轮。
3. CBC工作模式CBC是一种分组密码的工作模式,它通过引入初始向量(IV)和前一个块的密文来增强加密算法的安全性。
CBC工作模式的基本原理如下:1.首先,将明文分割成固定长度的块(通常为128位),最后一个块如果不够长,则补齐。
2.使用初始向量(IV)与第一个块进行异或操作。
3.将异或后的结果使用AES算法进行加密。
4.将加密后得到的密文与下一个块进行异或操作,并继续重复步骤3和4直到所有块都被处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AES加密、解密算法原理和AVR实现摘要 AES是美国高级加密标准算法,将在未来几十年里代替DES在各个领域中得到广泛应用。
本文在研究分析AES加密算法原理的基础上,着重说明算法的实现步骤,并结合AVR汇编语言完整地实现AES加密和解密。
根据AES 原理,提出几种列变化的优化算法,并根据实验结果分析和比较它们的优缺点。
关键词 AES算法 DES AVR汇编语言加密算法解密算法引言随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。
经过三轮的筛选,比利时Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。
此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。
尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。
AES设计有三个密钥长度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍[2]。
AES算法主要包括三个方面:轮变化、圈数和密钥扩展。
本文以128为例,介绍算法的基本原理;结合AVR汇编语言,实现高级数据加密算法AES。
1 AES加密、解密算法原理和AVR实现AES是分组密钥,算法输入128位数据,密钥长度也是128位。
用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列)。
每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。
由于外部输入的加密密钥K长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥K扩展成更长的比特串,以生成各轮的加密和解密密钥。
1.1 圈变化AES每一个圈变换由以下三个层组成:非线性层——进行Subbyte变换;线行混合层——进行ShiftRow和MixColumn运算;密钥加层——进行AddRoundKey运算。
① Subbyte变换是作用在状态中每个字节上的一种非线性字节转换,可以通过计算出来的S盒进行映射。
Schange:ldi zh,$01;将指针指向S盒的首地址mov zl,r2;将要查找的数据作为指针低地址ldtemp,z+;取出这个对应的数据mov r2,temp;交换数据完成查表…ret② ShiftRow是一个字节换位。
它将状态中的行按照不同的偏移量进行循环移位,而这个偏移量也是根据Nb的不同而选择的[3]。
shiftrow:;这是一个字节换位的子程序mov temp,r3;因为是4×4mov r3,r7; r2 r6 r10 r14 r2 r6 r10 r14mov r7,r11; r3 r7 r11 r15---r7 r11 r15 r3mov r11,r15; r4 r8 r12 r17 r12 r17 r4 r8mov r15,temp; r5 r9 r13 r18 r18 r5 r9 r13mov temp,r4mov temp1,r8mov r4,r12mov r8,r17mov r12,tempmov r17,temp1mov temp,r18mov r18,r13mov r13,r9mov r9,r5mov r5,tempret③在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式a(x)与固定多项式c(x)相乘的结果。
b(x)=c(x)*a(x)的系数这样计算:*运算不是普通的乘法运算,而是特殊的运算,即b(x)=c(x)?a(x)(mod x4+1)对于这个运算b0=02。
a0+03。
a1+a2+a3令xtime(a0)=02。
a0其中,符号“。
”表示模一个八次不可约多项式的同余乘法[3]。
mov temp,a0;这是一个mixcolimn子程序rcall xtime;调用xtime程序mov a0,tempmov temp,a1rcall xtimeeor a0,a1eor a0,tempeor a0,a2eor a0,a3;完成b(x)的计算…xtime:;这是一个子程序ldi temp1,$1blsl tempbrcs next1;如果最高位是1,则转移next: ret;否则什么也不变化next1:eor temp,temp1rjmp next对于逆变化,其矩阵C要改变成相应的D,即b(x)=d(x)*a(x)。
④密钥加层运算(addround)是将圈密钥状态中的对应字节按位“异或”。
⑤根据线性变化的性质[1],解密运算是加密变化的逆变化。
这里不再详细叙述。
1.2 轮变化对不同的分组长度,其对应的轮变化次数是不同的,如表1所列。
表1 AES类型与基参数的关系1.3 密钥扩展AES算法利用外部输入密钥K(密钥串的字数为Nk),通过密钥的扩展程序得到共计4(Nr+1)字的扩展密钥。
它涉及如下三个模块:①位置变换(rotword)——把一个4字节的序列[A,B,C,D]变化成[B,C,D,A];② S盒变换(subword)——对一个4字节进行S盒代替;③变换Rcon[i]——Rcon[i]表示32位比特字[xi-1,00,00,00]。
这里的x是(02),如Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]……扩展密钥的生成:扩展密钥的前Nk个字就是外部密钥K;以后的字W[[i]]等于它前一个字W[[i-1]]与前第Nk个字W[[i-Nk]]的“异或”,即W[[i]]=W[[i-1]] W[[i- Nk]]。
但是若i为Nk的倍数,则W[i]=W[i-Nk] Subword(Rotword(W[[i-1]])) Rcon[i/Nk]。
程序执行的时候,主要调用以上几个子程序,具体实现如下:Keyexpansion:rcall rotwoedrcall subwordrcall Rcon…AES的加密与解密流程如图1所示。
图1 AES的加密和解密流程2 AES加密、解密算法的优化由以上算法的流程中可以清楚地看到,整个算法中程序耗时最多的就是圈变化部分,因此对于算法的优化也就在此;而圈变化部分可以优化的也就是列变化。
因为列变化是一个模乘同余规则。
由于AES加密和解密是不对称的,如果不对其进行优化,会使算法的解密速度远远大于加密的速度[1]。
①加密运算。
对列变换(Mixcolumn)可以通过调用xtime子程序进行优化。
具体算法[1]实现如下:另一种有效的优化方法就是离线构造一个表格,即列变化表格。
这样只要通过查表的方式就可以提高加密速度。
②解密算法的优化。
由于解密的列变换的系数分别是09、0E、0B和0D。
在AVR单片机上实现以上的乘法显然是需要很多的时间,从而导致了解密的性能降低。
优化方法一:对列变化进行分解使倍乘次数降低。
仔细研究解密矩阵的系数,不难发现解密矩阵和加密矩阵有着一定的联系,即解密矩阵等于加密矩阵和一个矩阵的相乘。
通过这样的联系,就可以对算法进行优化:这样一来,只用几个简单的“异或”就可以实现列变化,使倍乘的次数降低,提高解密的速度。
优化方法二:构造表格。
同加密构造方法一样,可以构造四个表格T[ea]=e×a; T[9a]=9×a;T[9a]=9×a;T[ba]=b×a。
这样一来,也只需要进行查表和简单的异或就可以完成解密的任务。
虽然这种方法将增加额外的开销,但是它却是一种有效的方法。
3 AES加密与解密的实验仿真根据以上实验步骤和优化方法得出表2、3所列实验结果。
表2 AES-128不同加密方法性能比较设主密钥为:000102030405060708090a0b0c0d0e0f(128bit)。
加密明文:00112233445566778899AABBCCDDEEFF。
密文:69C4E0D86A7B0430D8CDB78070B4C55A。
解密密文:69C4E0D86A7B0430D8CDB78070B4C55A。
明文:00112233445566778899AABBCCDDEEFF。
总之,AES密码是一个非对称密码体制,它的解密要比加密复杂和费时。
解密优化算法没有增加存储空间的基础上,以列变化为基础进行处理,程序比原始的要小,而且节约了时间。
解密优化方法速度最快,效率最高,但要增加系统的存储空间,因此它的程序也是最大的一个。
注:AES-128数据加密解密程序见本刊网站()。
结语AES高级数据加密算法不管是从安全性、效率,还是密钥的灵活性等方面都优于DES数据加密算法,在今后将逐步代替DES而被广泛应用。
本文基于AVR的高速计算性能实现了AES算法,并结合汇编语言进行了算法的优化。
根据实际应用的具体需要,可以选用相应的方法。
参考文献1 宋震,等. 密码学. 北京:中国水利水电出版社,20022 杨义先.现代密码新理论.北京:科学出版社,20023 谷大武,等.高级加密标准(AES)算法—Rijndael的设计.北京:清华大学出版社,20034 耿德根,等.AVR单片机应用技术.北京:北京航空航天大学出版社,20025 宋建国,等.AVR高速嵌入式单片机原理与应用.北京:北京航空航天大学出版社,20016 NIST. Advanced Encryption Standard (AES) .Federal Information Processing Standards Publication,2001。