?? ffff.cpp
字號:
#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include"md5.h"
#include"G__md5.h"
//將字符轉(zhuǎn)換成16進制輸出
void convert(int m,unsigned char string[]);
//雪崩效應(yīng)中的統(tǒng)計函數(shù)
int snowslips(unsigned char string1[],unsigned char string2[]);
//計算MD5值
void md5_calculate(void);
//雪崩效應(yīng)檢驗
void snowslip();
void main()
{
char choose;
cout<<"選擇H,計算HASH值;選擇S,雪崩效應(yīng)的檢驗:"<<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<<"雪崩效應(yīng)改變后的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();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -