|  | 
 
| 
#include <stdio.h>
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  #include <string.h>
 #include "md5.h"
 
 #define LIMIT 128
 
 void md5(unsigned char *dest, unsigned char *src);
 void salt(unsigned char *mix, unsigned char *src);
 
 void md5(unsigned char *dest, unsigned char *src)
 {
 
 MD5_CTX md5;
 
 // 初始化
 MD5Init(&md5);
 // 传入明文字符串及其长度
 MD5Update(&md5, src, strlen((char *)src));
 // 得到加密后的字符串
 MD5Final(&md5, dest);
 }
 
 void salt(unsigned char *mix, unsigned char *src)
 {
 unsigned char temp1[16]; // 存储原始数据第一次计算MD5的值
 unsigned char temp2[16]; // 存储temp1中间16位为字符串
 int i, j, length;
 
 md5(temp1, src);
 
 for (i = 4, j = 0; i < 12; i++, j++)
 {
 snprintf(temp2 + 2*j, 16, "%02x", temp1[i]);
 }
 
 length = strlen(src);
 
 strncpy(mix, src, length);
 strncat(mix, temp2, 16);
 
 mix[length + 16 + 1] = '\0';
 }
 
 int main(void)
 {
 int i;
 unsigned char src[LIMIT];
 unsigned char mix[LIMIT + 16];
 unsigned char dest[16];
 
 printf("请输入密码:");
 scanf("%s", src);
 
 printf("你输入的密码是:%s\n", src);
 
 salt(mix, src);
 printf("加盐后的密码是:%s\n", mix);
 
 md5(dest, mix);
 printf("加密后的密码是:");
 for (i = 0; i < 16; i++)
 {
 printf("%02x", dest[i]);
 }
 putchar('\n');
 
 return 0;
 }
 
 Q1:
 snprintf(temp2 + 2*j, 16, "%02x", temp1[i])
 这句话为什么temp1每次进一个字节长度 而放进temp2里面却每次进两个字节长度呢??????是真想不明白
 
 
 Q2:
 MD5函数加密后存放在dest里是三十二个字符 还是十六个字节???
 | 
 |