带你学C带你飞s1e30课后作业实现
#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; //用来存放未加盐的MD5值
unsigned char buf; //缓冲区,用于存放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);
}
putchar('\n');
int sum=0,gao=0,di=0,j = 0;
for(i=4;i<12;i++)
{
sum = (int)dec;
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 = (char)gao;
buf = (char)di;
j =j+2;
}
buf = '\0';
strcat(encrypt,buf);
MD5Init(&md5); //初始化
MD5Update(&md5,encrypt,strlen(encrypt)); //传入拼接后明文字符串及长度
MD5Final(&md5,decrypt); //得到MD5值,并存入decrypt(加盐)
}
int main()
{
unsigned char decrypt;
unsigned char encrypt;
printf("请输入一串字符:");
scanf("%s",&encrypt);
MD5(decrypt,encrypt);
printf("加盐后的字符串是:%s\n",encrypt);
int i;
printf("加盐后的MD5值是:");
for(i=0;i<16;i++)
{
printf("%02x",decrypt);
}
return 0;
}
页:
[1]