📄 ffff.cpp
字号:
#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include"md5.h"
#include"G__md5.h"
//将字符转换成16进制输出
void convert(int m,unsigned char string[]);
//雪崩效应中的统计函数
int snowslips(unsigned char string1[],unsigned char string2[]);
//计算MD5值
void md5_calculate(void);
//雪崩效应检验
void snowslip();
void main()
{
char choose;
cout<<"选择H,计算HASH值;选择S,雪崩效应的检验:"<<endl;
cin>>choose;
if(choose=='H')
md5_calculate();
else
if(choose=='S')
snowslip();
}
void convert(int m,unsigned char string[])
{
int lenth=m;
int mid;
char ch;
char str[30][2];
for(int i=0;i<lenth;i++)
{
mid=string[i]/16;
if(mid>=10)
ch=mid-10+'A';
else
ch=mid+'0';
str[i][0]=ch;
mid=string[i]%16;
if(mid>=10)
ch=mid-10+'A';
else
ch=mid+'0';
str[i][1]=ch;
}
for(i=0;i<lenth;i++)
cout<<str[i][0]<<str[i][1];
}
int snowslips(unsigned char string1[],unsigned char string2[])
{
int count=0;
int num[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
unsigned int mid;
int i,j;
for(i=0;i<16;i++)
{
mid=string1[i]^string2[i];
for(j=0;j<8;j++)
{
if(mid&num[j])
count++;
}
}
return count;
}
void md5_calculate(void)
{
cout<<"请输入长度:";
int lenth;
cin>>lenth;
cout<<endl;
cout<<"请输入消息:"<<endl;
char *message;
message=new char[lenth];
cin>>*message;
unsigned char *hash;
hash=new unsigned char[lenth];
md5_state md1;
md5_init(&md1);
md5_process(&md1, (unsigned char *)message, lenth);
md5_done(&md1, hash);
cout<<"HASH值:"<<endl;
convert(lenth,hash);
cout<<endl;
getch();
}
void snowslip()
{
cout<<"请输入长度:";
int lenth;
cin>>lenth;
cout<<"请输入消息:"<<endl;
char *message;
message=new char[lenth];
cin>>*message;
cout<<endl;
unsigned char *hash;
hash=new unsigned char[lenth];
md5_state md1;
md5_init(&md1);
md5_process(&md1, (unsigned char *)message, lenth);
md5_done(&md1, hash);
unsigned char *mid;
mid=new unsigned char[lenth];
for(int i=0;i<lenth;i++)
mid[i]=hash[i];
int sum=0;
cout<<"原HASH值:"<<endl;
convert(lenth,mid);
cout<<endl;
cout<<endl<<"雪崩效应改变后的HASH值:"<<endl;
int num;
for(int j=0;j<8;j++)
{
message[5]=' '+j;
md5_state md1;
md5_init(&md1);
md5_process(&md1, (unsigned char*)message, lenth);
md5_done(&md1, hash);
num=snowslips(hash,mid);
sum+=num;
convert(lenth,hash);
cout<<" HASH值改变了"<<num<<"位"<<endl;
}
cout<<endl<<"改变一个字符会平均改变HASH有"<<sum/8<<"位"<<endl;
cout<<endl;
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -