ImageVerifierCode 换一换
格式:DOC , 页数:26 ,大小:25.01KB ,
资源ID:2778875      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2778875.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(aes算法加密c语言完整程序(AES algorithm encryption C language complete program).doc)为本站会员(dzzj200808)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

aes算法加密c语言完整程序(AES algorithm encryption C language complete program).doc

1、aes算法加密 c语言完整程序(AES algorithm encryption C language complete program)#包括 7) ;/添加 GF(2)中的旋转字节。结果=温度;/将结果放入表中。S盒我 =结果;(+)!= 0) ;虚空 CalcSBoxInv(字节* S 盒,字节* sboxinv)我= 0 字节数据;J = 0字节数据;/遍历所有元素在 sboxinv使用 I.做通过使用/搜索方法 J.cleardog();做/ /检查电流是电流 I.逆如果(方法 J = =我)/如果这样,集 sboxinc和显示搜索完毕。sboxinv 我 = J;j255;(+)!

2、= 0) ;(+)!= 0) ;0x03,语句语句,0x03 0x01 0x01 0x02, , ,;/准备矩阵的第一列的两倍,消除需要循环。字节数据的结果 4 ;/ /把每个矩阵的行和列向量的点积。结果 0 = dotproduct(行 0,列) ;结果 1 = dotproduct(行 3,列) ;结果 2 = dotproduct(行 2,列) ;结果 3 = dotproduct(行 1,列) ;/将临时结果复制到原始列。列 0 =结果 0 ;列 1 =结果 1 ;列 2 =结果 2 ;列 3 =结果 3 ;无效字节(字节*字节,字节数)做*方法*字节字节= ;/替代每个字节的状态。字

3、节+;(-计数) ;无效 invsubbytesandxor(字节*字节,字节*键,字节数)做/ / * *字节字节= sboxinv *关键;/ /逆替代每个字节的状态和添加关键。*字节= 2 字节 *键/ 2 直接使用。增加速度。字节+;密钥+;(-计数) ;无效 invshiftrows(字节*状态)字节的温度;/注意:状态是按列排列的。/循环右行第二次。温度=国家 1 + 3 * 4 ;状态 1 + 3 * 4 =状态 1 + 2 * 4 ;状态 1 + 2 * 4 =状态 1 + 1 * 4 ;状态 1 + 1 * 4 =状态 1 + 0 * 4 ;状态 1 + 0 * 4 =温度;

4、/循环第三行右两次。温度=国家 2 + 0 * 4 ;状态 2 + 0 * 4 =状态 2 + 2 * 4 ;状态 2 + 2 * 4 =温度;温度=国家 2 + 1 * 4 ;状态 2 + 1 * 4 =状态 2 + 3 * 4 ;状态 2 + 3 * 4 =温度;/ /周期第四排右三次,即一旦离开。温度=国家 3 + 0 * 4 ;状态 3 + 0 * 4 =状态 3 + 1 * 4 ;状态 3 + 1 * 4 =状态 3 + 2 * 4 ;状态 3 + 2 * 4 =状态 3 + 3 * 4 ;状态 3 + 3 * 4 =温度;无效 ShiftRows(字节*状态)字节的温度;/注意:状

5、态是按列排列的。/循环,第二排,一次。温度=国家 1 + 0 * 4 ;状态 1 + 0 * 4 =状态 1 + 1 * 4 ;状态 1 + 1 * 4 =状态 1 + 2 * 4 ;状态 1 + 2 * 4 =状态 1 + 3 * 4 ;状态 1 + 3 * 4 =温度;/循环第三行左两次。温度=国家 2 + 0 * 4 ;状态 2 + 0 * 4 =状态 2 + 2 * 4 ;状态 2 + 2 * 4 =温度;温度=国家 2 + 1 * 4 ;状态 2 + 1 * 4 =状态 2 + 3 * 4 ;状态 2 + 3 * 4 =温度;/ /周期第四排左三次,右一次,即。温度=国家 3 + 3

6、 * 4 ;状态 3 + 3 * 4 =状态 3 + 2 * 4 ;状态 3 + 2 * 4 =状态 3 + 1 * 4 ;状态 3 + 1 * 4 =状态 3 + 0 * 4 ;状态 3 + 0 * 4 =温度;虚空 InvMixColumns(字节*状态)列混合(状态+ 0 * 4) ;列混合(状态+ 1 * 4) ;列混合(状态+ 2 * 4) ;列混合(状态+ 3 * 4) ;无效的列(字节*状态)列混合(状态+ 0 * 4) ;列混合(状态+ 1 * 4) ;列混合(状态+ 2 * 4) ;列混合(状态+ 3 * 4) ;无效 xorbytes(字节* * bytes2 bytes1

7、,字节,字节数)做* bytes1 = * bytes2;/ /添加在 GF(2) ,即异或。bytes1 + +;bytes2 + +;(-计数) ;虚空 CopyBytes(字节*,*从字节,字节数)做*从;+;来自+;(-计数) ;无效的密钥扩展(字节* Expandedkey)字节数据温度 4 ;字节我;字节 XDATA RCON 4 = 0x01,0x00,0x00,0x00 ;/轮常数。unsigned char xdata *键;unsigned char xdata一 16 ;密钥=;/ /以下为加解密密码,共字节可以选择任意值 16。关键 0 = 0x30;关键 1 = 0x

8、30;关键 2 = 0x30;关键 3 = 0x30;关键 4 = 0x30;关键 5 = 0x30;关键 6 = 0x30;关键 7 = 0x30;关键 8 = 0x30;关键 9 = 0x30;关键 10 = 0x30;关键 11 = 0x30;关键 12 = 0x30;关键 13 = 0x30;关键 14 = 0x30;关键 15 = 0x30;/复制密钥以启动扩展密钥。我= keylength;做* = *密钥 Expandedkey;Expandedkey + +;密钥+;而(i) ;/准备最后 4字节的密钥。Expandedkey = 4;临时 0 = *(Expandedkey

9、+ +) ;临时 1 = *(Expandedkey + +) ;临时 2 = *(Expandedkey + +) ;临时 3 = *(Expandedkey + +) ;/展开键。我= keylength;(我在 24/我们刚好过了一个街区大小吗?else if(我 keylength)= =块)SubBytes(温度,4) ;/替代每个字节。# endif/ /添加字节在 GF(2)的一个 keylength带走。XORBytes(临时 Expandedkey - keylength,4) ;/将结果复制到当前的 4字节。*(Expandedkey + +)=温度 0 ;*(Expand

10、edkey + +)=温度 1 ;*(Expandedkey + +)=温度 2 ;*(Expandedkey + +)=温度 3 ;+ + 4;/ /下一个 4字节。无效 invcipher(字节*块,字节* Expandedkey)圆= rounds-1 字节;Expandedkey + =块*轮;XORBytes(块 Expandedkey,16) ;Expandedkey =块;做invshiftrows(块) ;invsubbytesandxor(块 Expandedkey,16) ;Expandedkey =块;InvMixColumns(块) ;(圆形) ;invshiftrow

11、s(块) ;invsubbytesandxor(块 Expandedkey,16) ;无效密码(字节*块,字节* Expandedkey)/完成一个块(16 字节,128bit)的加密圆= rounds-1 字节;XORBytes(块 Expandedkey,16) ;Expandedkey + =块;做SubBytes(块,16) ;ShiftRows(块) ;列(块) ;XORBytes(块 Expandedkey,16) ;Expandedkey + =块;(圆形) ;SubBytes(块,16) ;ShiftRows(块) ;XORBytes(块 Expandedkey,16) ;无效

12、 aesinit(unsigned char * tempbuf)powtbl =酒店;logtbl = 2;CalcPowLog(powtbl,logtbl) ;tempbuf sbox =;CalcSBox(方法) ;Expandedkey =酒店;酒店/至此用来存贮密码表密钥扩展(Expandedkey) ;sboxinv = 2;/必须 2。2 至此开始只用来存贮 sboxinvCalcSBoxInv(S 盒,sboxinv) ;16 /对一个字节块解密,参数缓冲是解密密缓存,葫芦是要解密的块无效 aesdecrypt(unsigned char *缓冲,unsigned char *

13、葫芦)/ /字节数据温度块;/ / CopyBytes(温度、缓冲块) ;CopyBytes(缓冲,葫芦,块大小) ;invcipher(缓冲,Expandedkey) ;/ / xorbytes(缓冲区、葫芦、块) ;CopyBytes(葫芦,缓冲块) ;16 /对一个字节块完成加密,参数缓冲是加密缓存,葫芦是要加密的块无效 aesencrypt(unsigned char *缓冲,unsigned char *葫芦)CopyBytes(缓冲,葫芦,块大小) ;/ / xorbytes(缓冲区、葫芦、块) ;密码(缓冲,Expandedkey) ;CopyBytes(葫芦,缓冲块) ;/ /

14、加解密函数,参数为加解密标志,要加解密的数据缓存起始指针,要加解密的数据长度(如果解密运算,必须是 16的整数倍。 )unsigned char aesblockdecrypt(有些直接,unsigned char * ChiperDataBuf,unsigned char datalen)unsigned char xdata我;unsigned char数据块;unsigned char xdata sboxbuf 256 ;unsigned char xdata tempbuf 16 ;unsigned long int xdata orignlen = 0;/未加密数据的原始长度如果(

15、直接= 0)*(unsigned char *)& orignlen + 3)= chiperdatabuf 0 ;*(unsigned char *)& orignlen + 2)= chiperdatabuf 1 ;*(unsigned char *)& orignlen + 1)= chiperdatabuf 2 ;*(unsigned char *)& orignlen)= chiperdatabuf 3 ;datalen = datalen-4;其他的memmove(chiperdatabuf + 4,ChiperDataBuf,DataLen) ;orignlen = datale

16、n;chiperdatabuf 0 = orignlen;chiperdatabuf 1 = orignlen 8;chiperdatabuf 2 = orignlen 16;chiperdatabuf 3 = orignlen 24;cleardog();aesinit(sboxbuf) ;/ /初始化如果(直接= = 0)/解密块= datalen / 16;对于(i = 0;i 块;i + +)cleardog();aesdecrypt(tempbuf,chiperdatabuf + 4 + 16 *我) ;memmove(chiperdatabuf,chiperdatabuf + 4,

17、OrignLen) ;cleardog();返回(orignlen) ;其他/ /加密如果(datalen % 16!= 0)块= datalen / 16 + 1;/ / memset(chiperdatabuf + 4 +块16(datalen % 16) ,0x00,datalen % 16) ;/不足 16字节的块补零处理其他的块= datalen / 16;对于(i = 0;i 块;i + +)cleardog();aesencrypt(tempbuf,chiperdatabuf + 4 + 16 *我) ;cleardog();返回(块* 16 + 4) ;/ / # endif以

18、上是文件以下是头文件 C。#则 aes_h#定义 aes_hextern void aesinit(unsigned char * tempbuf) ;extern void aesdecrypt(unsigned char *缓冲,unsigned char *葫芦) ;extern void aesencrypt(unsigned char *缓冲,unsigned char *葫芦) ;extern void aesinit(unsigned char * tempbuf) ;extern void aesdecrypt(unsigned char *缓冲,unsigned char *葫芦) ;extern void aesencrypt(unsigned char *缓冲,unsigned char *葫芦) ;extern char aesblockdecrypt(有些直接,unsigned char * ChiperDataBuf,unsigned char datalen) ;# endif / aes_h这是我根据网上程序改写的。只支持 128位加解密。没有使用占内存很多的查表法。故运算速度会稍慢。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报