|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include "md5.h"
#include <string.h>
void MD5(char *decrypt , char *encrypt);
void MD5(char *decrypt, char *encrypt) //decrypt目标字符串,存放MD5值,encrypt源字符串,用户输入的字符串
{
unsigned char dec[16]; //用来存放未加盐的MD5值
unsigned char buf[17]; //缓冲区,用于存放md5值中间16位的字符
MD5_CTX md5;
MD5Init(&md5); //初始化
MD5Update(&md5,encrypt,strlen(encrypt)); //传入明文字符串及长度
MD5Final(&md5,dec); // 得到MD5值,并存入dec(未加盐)
int i;
printf("未加盐的MD5值是:");
for(i=0;i<16;i++)
{
printf("%02x",dec[i]);
}
putchar('\n');
int sum=0,gao=0,di=0,j = 0;
for(i=4;i<12;i++)
{
sum = (int)dec[i];
gao = sum/0x10; //得到高位数据
di = sum-(gao*0x10); //得到地位数据
//转换数据为对应字符
if(gao >= 0x0A)
{
gao = gao+0x57;
}
else
{
gao = gao+0x30;
}
if(di >= 0x0A)
{
di = di+0x57;
}
else
{
di = di+0x30;
}
buf[j] = (char)gao;
buf[j+1] = (char)di;
j = j+2;
}
buf[16] = '\0';
strcat(encrypt,buf);
MD5Init(&md5); //初始化
MD5Update(&md5,encrypt,strlen(encrypt)); //传入拼接后明文字符串及长度
MD5Final(&md5,decrypt); //得到MD5值,并存入decrypt(加盐)
}
int main()
{
unsigned char decrypt[16];
unsigned char encrypt[256];
printf("请输入一串字符:");
scanf("%s",&encrypt);
MD5(decrypt,encrypt);
printf("加盐后的字符串是:%s\n",encrypt);
int i;
printf("加盐后的MD5值是:");
for(i=0;i<16;i++)
{
printf("%02x",decrypt[i]);
}
return 0;
} |
|