📄 test.cpp
字号:
#include<iostream.h>
#include"stdio.h"
#include"string.h"
#define max 512
long len;
int m=-1;
char numstr[max];
char numstring[max];
void fill(char numstring[]) //对原始数据进行填充
{
int i,j;
char numlen[64];
char numtemp[512];
len=8*strlen(numstring);
for(i=0;i<len/8;i++)
for(j=7;j>=0;j--)
{
numstr[i*8+j]=numstring[i]%2+48;
numstring[i]=numstring[i]/2;
}
printf("\n\n填充前的信息为:");
for(i=0;i<len;i++)
printf("%c",numstr[i]);
int l=len%512;
if(l!=448)
{
if(l<448)
m=447-l;
else
m=512-(l-448)-1;
numtemp[0]='1';
for(i=1;i<=m;i++)
numtemp[i]='0';
for(i=len;i<=len+m;i++)
numstr[i]=numtemp[i-len];
}
long length=len;
for(i=63;i>=0;i--)
{
numlen[i]=length%2+48;
length=length/2;
}
for(i=0;i<64;i++)
numstr[len+m+1+i]=numlen[i];
return;
}
long f(long b,long c,long d,int i)
{
long temp;
switch(i)
{
case '1':
temp=b&c|~b&d;
break;
case '2':
case '4':
temp=b^c^d;
break;
case '3':
temp=b&c|b&d|c&d;
break;
}
return(temp);
}
long rot(long num,int bits)
{
return((num<<bits)|(num>>(32-bits)));
}
void main()
{
int i,j,n,s,p,q;
long k[4];
long tmp[5];
k[0]=0X5A82799;
k[1]=0X6ED9EBA1;
k[2]=0X8F1BBCDC;
k[3]=0XCA62C1D6;
long a=0X67452301,b=0XEFCDAB89,c=0X98BADCFE,d=0X10325476,e=0XC3D2E1F0;
printf("请输入要散列的信息码(字符串):");
gets(numstring);
printf("\n填充前的位长(bit length)是:%ld",8*strlen(numstring));
fill(numstring);
len=strlen(numstr);
printf("\n\n填充后的位长(bit length)是:%ld",len);
n=len/512;
printf("\n\n填充后的信息为:");
for(i=0;i<len;i++)
printf("%c",numstr[i]);
for(s=0;s<=n-1;s++)
{
long w[80];
char temp[4];
for(i=0;i<16;i++)
{
w[i]=0;
for(j=0;j<32;j++)
{
temp[j]=numstr[512*s+32*i+j];
w[i]=(w[i]+temp[j])*2;
}
w[i]=w[i]/2;
}
for(i=16;i<80;i++)
w[i]=rot(w[i-16]^w[i-14]^w[i-8]^w[i-3],1);
for(i=0;i<=3;i++)
for(j=0;j<=19;j++)
{
tmp[0]=a;tmp[1]=b;tmp[2]=c,tmp[3]=d;tmp[4]=e;
a=tmp[4]+f(tmp[1],tmp[2],tmp[3],i+1)+rot(tmp[0],5)+w[j+20*i]+k[i];
b=tmp[0];
c=rot(tmp[1],30);
d=tmp[2];
e=tmp[3];
}
}
printf("\n\n 所输入信息的sha-1散列值为: %lx,%lx,%lx,%lx,%lx",a,b,c,d,e);
scanf("haha");
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -