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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(AESWord格式文档下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

AESWord格式文档下载.docx

1、#define ROTL8(x) (x)24)#define ROTL16(x) (x)16)#define ROTL24(x) (x)8)/* Fixed Data */static BYTE InCo4=0xB,0xD,0x9,0xE; /* Inverse Coefficients */static BYTE fbsub256;static BYTE rbsub256;static BYTE ptab256,ltab256;static WORD ftable256;static WORD rtable256;static WORD rco30;/* Parameter-dependen

2、t data */int Nk,Nb,Nr;BYTE fi24,ri24;WORD fkey120;WORD rkey120;static WORD pack(BYTE *b) /* pack bytes into a 32-bit Word */ return (WORD)b324)|(WORD)b216)|(WORD)b18); b2=(BYTE)(a16); b3=(BYTE)(a24);/关于模多项式0x011b的乘10b运算static BYTE xtime(BYTE a) BYTE b; if (a&0x80) b=0x1B; else b=0; a=1; a=b; return

3、a;static BYTE bmul(BYTE x,BYTE y) /* x.y= AntiLog(Log(x) + Log(y) */ if (x & y) return ptab(ltabx+ltaby)%255; else return 0;static WORD SubByte(WORD a) BYTE b4; unpack(a,b); b0=fbsubb0; b1=fbsubb1; b2=fbsubb2; b3=fbsubb3; return pack(b); static BYTE product(WORD x,WORD y) /* dot product of two 4-byt

4、e arrays */ BYTE xb4,yb4; unpack(x,xb); unpack(y,yb); return bmul(xb0,yb0)bmul(xb1,yb1)bmul(xb2,yb2)bmul(xb3,yb3);static WORD InvMixCol(WORD x) /* matrix Multiplication */ WORD y,m; m=pack(InCo); b3=product(m,x); m=ROTL24(m); b2=product(m,x); b1=product(m,x); b0=product(m,x); y=pack(b); return y;BYT

5、E ByteSub(BYTE x) BYTE y=ptab255-ltabx; /* multiplicative inverse */ x=y; x=ROTL(x); y=x; y=0x63;void gentables(void) /* generate tables */ int i; BYTE y,b4; /* use 3 as primitive root to generate power and log tables */ ltab0=0; ptab0=1; ltab1=0; ptab1=3; ltab3=1; for (i=2;i256;i+) ptabi=ptabi-1xti

6、me(ptabi-1); ltabptabi=i; /* affine transformation:- each bit is xored with itself shifted one bit 仿射变换 */ fbsub0=0x63; rbsub0x63=0; for (i=1; y=ByteSub(BYTE)i); fbsubi=y; rbsuby=i; for (i=0,y=1;30; rcoi=y; y=xtime(y); /* calculate forward and reverse tables */ for (i=0; y=fbsubi; b3=yxtime(y); b2=y

7、; b1=y; b0=xtime(y); ftablei=pack(b); y=rbsubi; b3=bmul(InCo0,y); b2=bmul(InCo1,y); b1=bmul(InCo2,y); b0=bmul(InCo3,y); rtablei=pack(b);void strtoHex(char *str,char *hex) char ch; int i=0, by = 0; while(i = 0 & ch 9) by = (by AF + 10; else / error if not hexadecimal printf(key must be in hexadecimal

8、 notationn); exit(0); / store a key byte for each pair of hexadecimal digits if(i+ & 1) hexi / 2 - 1 = by & 0xff;void hextoStr(char *hex,char *str) 32 & *hex) / the maximum key length is 32 bytes(256 bits) and by = *hex ; / process a hexadecimal digit(high) by=by4 &0x0f; if(by = 0 & by = 0x0A &= 0x0

9、F) *str+ = by - 10+ by = *hex+; / process a hexadecimal digit(low) by=by & i+;void gkey(int nb,int nk,char *key) /* blocksize=32*nb bits. Key=32*nk bits */ /* currently nb,bk = 4, 6 or 8 */ /* key comes as 4*Nk bytes */ /* Key Scheduler. Create expanded encryption key */ int i,j,k,m,N; int C1,C2,C3;

10、 WORD CipherKey8; Nb=nb; Nk=nk; /* Nr is number of rounds */ if (Nb=Nk) Nr=6+Nb; else Nr=6+Nk; C1=1; if (Nb8) C2=2; C3=3; else C2=3; C3=4; /* pre-calculate forward and reverse increments */ for (m=j=0;jnb;j+,m+=3) fim=(j+C1)%nb; fim+1=(j+C2)%nb; fim+2=(j+C3)%nb; rim=(nb+j-C1)%nb; rim+1=(nb+j-C2)%nb;

11、 rim+2=(nb+j-C3)%nb; N=Nb*(Nr+1); for (i=j=0;Nk;i+,j+=4) CipherKeyi=pack(BYTE *)&keyj);i+) fkeyi=CipherKeyi; for (j=Nk,k=0;N;j+=Nk,k+) fkeyj=fkeyj-NkSubByte(ROTL24(fkeyj-1)rcok; if (Nk=6)Nk & (i+j) fkeyi+j=fkeyi+j-Nkfkeyi+j-1; else(i+j) if (j+4)8) ROTL16(ftable(BYTE)(xfim+116) ROTL24(ftablexfim+224)

12、; t=x; y=t; /* swap pointers */* Last Round - unroll if possible */ yj=fkeyk+(WORD)fbsub(BYTE)xj ROTL8(WORD)fbsub(BYTE)(xfim ROTL16(WORD)fbsub(BYTE)(xfim+1 ROTL24(WORD)fbsubxfim+2 unpack(yi,(BYTE *)& xi=yi=0; /* clean up stack */ return;void decrypt(char *buff) ai=rkeyi; loop and hard-code in the va

13、lues of ri */ /* This is the time-critical bit */ yj=rkeyk+rtable(BYTE)xj ROTL8(rtable(BYTE)(xrim ROTL16(rtable(BYTE)(xrim+1 ROTL24(rtablexrim+2 yj=rkeyk+(WORD)rbsub(BYTE)xj ROTL8(WORD)rbsub(BYTE)(xrim ROTL16(WORD)rbsub(BYTE)(xrim+1 ROTL24(WORD)rbsubxrim+2int main() /* test driver */ int i,nb,nk; ch

14、ar str=abcd1234567890123456789012345678901212345678901234567890123456789012 char key32; char block32; gentables(); strtoHex(str,key); hextoStr(key,str); /just to test these two functionsKey= 64;i+) printf(%c,stri);n32;i+) blocki=i; for (nb=4;nb=8;nb+=2) for (nk=4;nknk+=2) nBlock Size= %d bits, Key Size= %d bitsn,nb*32,nk*32); gkey(nb,nk,key);Plain= nb*4;%02x,blocki); encrypt(block);Encrypt= ,(unsigned char)blocki); decrypt(block);Decrypt= return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1