Tôi đang cố gắng tạo băm MD5 cho một chuỗi "Xin chào thế giới" bằng cách sử dụng md5.h nguyên bản/không bị ảnh hưởng và md5c.c từ http://www.arp.harvard.edu. Nhưng kết quả của tôi khác với tất cả các công cụ trực tuyến md5 mà tôi đã thử nghiệm. Có gì sai mã này? Cảm ơn bạn.Trả lại băm MD5 sai trong C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md5.h"
void MD5hash(unsigned char *data, unsigned int dataLen, unsigned char *digest) {
MD5_CTX c;
MD5Init(&c);
MD5Update(&c, data, dataLen);
MD5Final(digest, &c);
}
int main(int argc, const char * argv[]) {
unsigned char digest[16];
const char *s = "Hello World";
unsigned int l = (unsigned int)strlen(s);
MD5hash((unsigned char *)s, l, digest);
for(int i = 0; i < 16; ++i)
printf("%02x", digest[i]);
return 0;
}
// My result: f2877a72c40494318c4b050bb436c582
// But online tools output: b10a8db164e0754105b7a99be72e3fe5
Như một mặt lưu ý - Tôi đã biên soạn mã của bạn chống lại việc triển khai MD5 của OpenSSL - nó hoạt động như mong đợi! Vì vậy, thực sự 'md5.c' bạn cố gắng sử dụng có thể chỉ đơn giản là bị hỏng cách này hay cách khác. –