md6 hash函数C程序代码.docx
- 文档编号:5191217
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:14
- 大小:17.21KB
md6 hash函数C程序代码.docx
《md6 hash函数C程序代码.docx》由会员分享,可在线阅读,更多相关《md6 hash函数C程序代码.docx(14页珍藏版)》请在冰豆网上搜索。
md6hash函数C程序代码
#include
#include
usingnamespacestd;
unsignedcharQ[120]=
{
0x73,0x11,0xc2,0x81,0x24,0x25,0xcf,0xa0,0x64,0x32,0x28,0x64,0x34,0xaa,0xc8,0xe7,0xb6,0x04,
0x50,0xe9,0xef,0x68,0xb7,0xc1,0xe8,0xfb,0x23,0x90,0x8d,0x9f,0x06,0xf1,0xdd,0x2e,0x76,0xcb,
0xa6,0x91,0xe5,0xbf,0x0c,0xd0,0xd6,0x3b,0x2c,0x30,0xbc,0x41,0x1f,0x8c,0xcf,0x68,0x23,0x05,
0x8f,0x8a,0x54,0xe5,0xed,0x5b,0x88,0xe3,0x77,0x5d,0x4a,0xd1,0x2a,0xae,0x0a,0x6d,0x60,0x31,
0x3e,0x7f,0x16,0xbb,0x88,0x22,0x2e,0x0d,0x8a,0xf8,0x67,0x1d,0x3f,0xb5,0x0c,0x2c,0x99,0x5a,
0xd1,0x17,0x8b,0xd2,0x5c,0x31,0xc8,0x78,0xc1,0xdd,0x04,0xc4,0xb6,0x33,0x3b,0x72,0x06,0x6c,
0x7a,0x15,0x52,0xac,0x0d,0x6f,0x35,0x22,0x63,0x1e,0xff,0xcb
};
voidmain()
{
intread_key(unsignedchar*K);
voidHash_data(unsignedchar*M,unsignedchar*K,intL,intd,intr,intlen,intkeylen);
voidSEQ_data(unsignedchar*M,unsignedchar*K,intL,intd,intr,intlen,intkeylen);
voidPAR_data(unsignedchar*M,unsignedchar*K,intL,intd,intr,intlen,intkeylen,unsignedchar*CM);
voidcompress(unsignedchar*NN,intr,unsignedchar*CM);
FILE*fp;
intlen,i,keylen;
unsignedchar*s,*M;
fp=fopen("data.txt","r");
if(fp==NULL)
{
cout<<"数据文件打开失败!
"< exit (1); } fseek(fp,0L,SEEK_END); len=ftell(fp); cout<<"文件长度"< rewind(fp);//重新指向开头 s=(unsignedchar*)malloc(len*sizeof(unsignedchar)); fread(s,sizeof(unsignedchar),len,fp); fclose(fp); M=s;//构建文件指针 cout<<"数据明文: "< for(i=0;i cout<<*(M+i); cout< cout<<"输入控制参数L"< intL; cin>>L; cout<<"hash比特长度: "< intd; cin>>d; cout<<"循环常数: "< intr; cin>>r; fp=fopen("PAR_data.txt","w+"); fclose(fp); unsignedcharkey[64],*K; K=key; keylen=read_key(K); Hash_data(M,K,L,d,r,len,keylen); } intread_key(unsignedchar*K)//读取秘钥文件 { unsignedcharkey[64]; FILE*fp; intlen,i; fp=fopen("key.txt","r"); if(fp==NULL) { cout<<"秘钥文件打开失败! "< exit (1); } fseek(fp,0L,SEEK_END); len=ftell(fp); cout< rewind(fp);//重新指向开头 if(len>64) { cout<<"输入秘钥长度超出,取前64bytes"< len=64; } fread(key,sizeof(unsignedchar),len,fp); fclose(fp); for(i=0;i *(K+i)=key[i]; for(i=len;i<64;i++) *(K+i)=0X00; cout<<"秘钥为: "< for(i=0;i cout<<*(K+i); return(len); } voidcompress(unsignedchar*NN,unsignedintr,unsignedchar*CM)//压缩函数 { FILE*fp; fp=fopen("md6_contest.txt","w+"); unsignedintN[178],i,j,t,c=16,*A,n=89,s1,s2,W[4]={0}; for(i=0,j=0;i<89;i++,j=j+2) { W[0]=((int)*(NN+i*8))<<23; W[1]=((int)*(NN+i*8+1))<<15; W[3]=((int)*(NN+i*8+2))<<7; W[4]=((int)*(NN+i*8+3)); N[j]=W[0]|W[1]|W[2]|W[3]; W[0]=((int)*(NN+i*8+4))<<23; W[1]=((int)*(NN+i*8+5))<<15; W[3]=((int)*(NN+i*8+6))<<7; W[4]=((int)*(NN+i*8+7)); N[j+1]=W[0]|W[1]|W[2]|W[3]; } t=r*c; A=(unsignedint*)malloc((2*(t+n-1))*sizeof(unsignedint)); for(i=0;i<2*(n-1);i++) A[i]=N[i]; unsignedintS1[200][2],S3[2],S4[2]; unsignedintS2[2]; S2[0]=0x01234567;// S2[1]=0x89abcdef; S1[0][0]=0x7311c281; S1[0][1]=0x2425cfa0; for(j=1;j<200;j++) { s1=S1[j][0]&0x80000000; s1=s1>>31; s2=S1[j][0]&0x80000000; s2=s1>>31; S3[0]=S1[j][0]<<1; S3[1]=S1[j][1]<<1; S3[0]=S1[j][0]|s2; S3[1]=S1[j][1]|s1; S4[0]=S1[j][0]&S2[0]; S4[1]=S1[j][1]&S2[1]; S1[j+1][0]=S3[0]^S4[0]; S1[j+1][1]=S3[1]^S4[1]; } for(i=0;i<200;i++) { fprintf(fp,"%3d: 0x%d%d\n",i,S1[i][0],S1[i][1]); } free(fp); unsignedintx[2],T[2]; for(i=n;i { j=i-n; T[0]=A[2*j]; T[1]=A[2*j+1]; x[0]=T[0]^S1[(i-n)/16][0]; x[1]=T[1]^S1[(i-n)/16][1]; j=i-17; T[0]=A[2*j]; T[1]=A[2*j+1]; x[0]=T[0]^x[0]; x[1]=T[1]^x[1]; T[0]=A[2*(i-18)]&A[2*(i-21)]; T[1]=A[2*(i-18)+1]&A[2*(i-21)+1]; x[0]=T[0]^x[0]; x[1]=T[1]^x[1]; T[0]=A[2*(i-31)]&A[2*(i-67)]; T[1]=A[2*(i-31)+1]&A[2*(i-67)+1]; x[0]=T[0]^x[0]; x[1]=T[1]^x[1]; intRR[16]={10,5,13,10,11,12,2,7,14,15,7,13,11,7,6,12}; intLL[16]={11,24,9,16,15,9,27,15,6,2,29,8,15,5,31,9}; intbytes1[64],bytes2[64]={0}; for(i=0;i<32;i++) { bytes1[i]=(x[0]>>(31-i))&1; bytes1[i+32]=(x[1]>>(31-i))&1; } for(i=64;(i-RR[(i-n)%16])>=0;i--) bytes2[i]=bytes1[i-RR[(i-n)%16]]^bytes1[i]; for(i=64;i>=0;i--) bytes1[i]=0; for(i=0;(i+LL[(i-n)%16])<64;i++) bytes1[i]=bytes2[i+LL[(i-n)%16]]; x[0]=0; x[1]=0; for(i=0;i<32;i++) { x[0]=x[0]|((bytes1[i]^bytes2[i])<<(31-i)); x[1]=x[1]|((bytes1[i+32]^bytes2[i+32])<<(31-i)); } A[2*i]=x[0]; A[2*i+1]=x[1]; } for(i=2*(t+n-c),j=0;i<2*(t+n-1);i=i+2,j=j+2) { *(CM+j)=A[i]; *(CM+j+1)=A[i+1]; } free(A); } voidSEQ_data(unsignedchar*M,unsignedchar*K,intL,intd,intr,intlen,intkeylen) { unsignedchar*A,j,i,p,z,W[8]={0},U[8],s,C[128]={0},MM[712],l,*M1,*CM; unsignedintV[2]; M1=MM; CM=C; if(len%(8*48)! =0) { j=len/(8*48)+1; p=((8*48)*j)*j-len; p=p*8; A=(unsignedchar*)malloc(((8*48)*j)*sizeof(unsignedchar)); for(i=0;i A[i]=*(M+i); for(i=len;i<8*j;i++) A[i]=0; } else { j=len/(8*48); A=(unsignedchar*)malloc(len*sizeof(unsignedchar)); for(i=0;i A[i]=*(M+i); } for(i=0;i { if(i=j-1) z=1; else z=0; s=r&0x000003ff; s=s<<15; V[0]=V[0]|s; s=L&0x000000ff; s=s<<7; V[0]=V[0]|s; s=z<<4; V[0]=V[0]|s; s=p&0x0000f000; s=s>>12; V[0]=V[0]|s; s=p&0x00000fff; s=s<<20; V[1]=V[1]|s; s=keylen&0x000000ff; s=s<<11; V[1]=V[1]|s; s=d&0x00000fff; V[1]=V[1]|s; W[0]=(V[0]&0xff000000)>>24; W[1]=(V[0]&0x00ff0000)>>16; W[2]=(V[0]&0x0000ff00)>>8; W[3]=(V[0]&0x000000ff); W[4]=(V[1]&0xff000000)>>24; W[5]=(V[1]&0x00ff0000)>>16; W[6]=(V[1]&0x0000ff00)>>8; W[7]=(V[1]&0x000000ff); V[0]=L+1; V[0]=U[0]<<24; V[1]=i; U[0]=(V[0]&0xff000000)>>24; U[1]=(V[0]&0x00ff0000)>>16; U[2]=(V[0]&0x0000ff00)>>8; U[3]=(V[0]&0x000000ff); U[4]=(V[1]&0xff000000)>>24; U[5]=(V[1]&0x00ff0000)>>16; U[6]=(V[1]&0x0000ff00)>>8; U[7]=(V[1]&0x000000ff); for(l=0;l<120;l++) MM[l]=Q[l]; for(l=120;l<184;l++) MM[l]=*(K+l-120); for(l=184;l<192;l++) MM[l]=U[l-184]; for(l=192;l<200;l++) MM[l]=V[l-192]; for(l=200;l<328;l++) MM[l]=C[l-200]; for(l=328;l<712;l++) MM[l]=*(M+i*48*8+l-328); compress(M1,r,CM); } for(l=0;l<16;l++)//SEQ函数消息串长度 cout<<*(CM+l); } voidPAR_data(unsignedchar*M,unsignedchar*K,intL,intd,intr,intlen,intkeylen,unsignedchar*CM1) { FILE*fp; fp=fopen("PAR_data.txt","w+"); fclose(fp); unsignedchar*A,j,i,p,z,W[8]={0},U[8],s,C[128]={0},MM[712],l,*M1,*CM,COP[64][128]={0}; unsignedintV[2]; M1=MM; CM=C; if(len%(8*64)! =0) { j=len/(8*64)+1; p=((8*64)*j)*j-len; p=p*8; A=(unsignedchar*)malloc(((8*64)*j)*sizeof(unsignedchar)); for(i=0;i A[i]=*(M+i); for(i=len;i<8*j;i++) A[i]=0; } else { j=len/(8*64); A=(unsignedchar*)malloc(len*sizeof(unsignedchar)); for(i=0;i A[i]=*(M+i); } for(i=0;i { if(i=j-1) z=1; else z=0; s=r&0x000003ff; s=s<<15; V[0]=V[0]|s; s=L&0x000000ff; s=s<<7; V[0]=V[0]|s; s=z<<4; V[0]=V[0]|s; s=p&0x0000f000; s=s>>12; V[0]=V[0]|s; s=p&0x00000fff; s=s<<20; V[1]=V[1]|s; s=keylen&0x000000ff; s=s<<11; V[1]=V[1]|s; s=d&0x00000fff; V[1]=V[1]|s; W[0]=(V[0]&0xff000000)>>24; W[1]=(V[0]&0x00ff0000)>>16; W[2]=(V[0]&0x0000ff00)>>8; W[3]=(V[0]&0x000000ff); W[4]=(V[1]&0xff000000)>>24; W[5]=(V[1]&0x00ff0000)>>16; W[6]=(V[1]&0x0000ff00)>>8; W[7]=(V[1]&0x000000ff); V[0]=L+1; V[0]=U[0]<<24; V[1]=i; U[0]=(V[0]&0xff000000)>>24; U[1]=(V[0]&0x00ff0000)>>16; U[2]=(V[0]&0x0000ff00)>>8; U[3]=(V[0]&0x000000ff); U[4]=(V[1]&0xff000000)>>24; U[5]=(V[1]&0x00ff0000)>>16; U[6]=(V[1]&0x0000ff00)>>8; U[7]=(V[1]&0x000000ff); for(l=0;l<120;l++) MM[l]=Q[l]; for(l=120;l<184;l++) MM[l]=*(K+l-120); for(l=184;l<192;l++) MM[l]=U[l-184]; for(l=192;l<200;l++) MM[l]=V[l-192]; for(l=200;l<712;l++) MM[l]=*(M+i*48*8+l-328); compress(M1,r,CM); for(l=0;l<128;l++)//SEQ函数消息串长度 COP[i][l]=*(CM+l); } for(i=0;i { for(l=0;l<128;l++) { fp=fopen("PAR_data.txt","a+"); fprintf(fp,"%c",COP[i][l]); fclose(fp); } } } voidHash_data(unsignedchar*M,unsignedchar*K,intL,intd,intr,intlen,intkeylen) { FILE*fp; unsignedchar*p,*s; p=(unsignedchar*)malloc(len*sizeof(unsignedchar)); intm1[64],l,lens,i; m1[0]=len; for(l=0;;) { l=l+1; if(l==L+1) { SEQ_data(M,K,L,d,r,len,keylen); break; } else { unsignedchar*s,*M; fp=fopen("PAR_data.txt","r"); if(fp==NULL) { cout<<"PAR文件打开失败! "< exit (1); } fseek(fp,0L,SEEK_END); lens=ftell(fp); rewind(fp);//重新指向开头 if(len==64*16*8) { s=(unsignedchar*)malloc(lens*sizeof(unsignedchar)); fread(s,sizeof(unsignedchar),lens,fp); fclose(fp); for(i=0;i cout< break; } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- md6 hash函数C程序代码 hash 函数 程序代码
![提示](https://static.bdocx.com/images/bang_tan.gif)