C++ Kalkulacja md5 pliku Windows/Unix
Ostatnio zmodyfikowano 2014-11-26 23:03
greatday Temat założony przez niniejszego użytkownika |
C++ Kalkulacja md5 pliku Windows/Unix » 2014-11-26 23:03:15 Cześć, od paru godzin głowię się jak uzyskać ten sam wynik kalkulacji sum MD5 w Windowsie oraz Unixie. Oto kod który używam na FreeBSD #include <stdio.h> #include <openssl/md5.h>
int main(int argc, char* argv[]) { unsigned char c[MD5_DIGEST_LENGTH]; char *filename=argv[1]; int i; FILE *inFile = fopen (filename, "rb"); MD5_CTX mdContext; int bytes; unsigned char data[1024];
if (inFile == NULL) { printf ("%s can't be opened.\n", filename); return 0; }
MD5_Init (&mdContext); while ((bytes = fread (data, 1, 1024, inFile)) != 0) MD5_Update (&mdContext, data, bytes); MD5_Final (c,&mdContext); for(i = 0; i < MD5_DIGEST_LENGTH; i++) printf("%02X", c[i]); printf (" %s\n", filename); fclose (inFile); return 0; }
A to dla Windowsa: std::string GetMD5(std::string file) { unsigned char c[MD5_DIGEST_LENGTH]; char md5[100]; sprintf(md5,""); int i; FILE *inFile = fopen (file.c_str(), "rb"); MD5_CTX mdContext; int bytes; unsigned char data[1024];
if (inFile == NULL) { //printf ("%s can't be opened.\n", filename); return ""; }
MD5_Init (&mdContext); while ((bytes = fread (data, 1, 1024, inFile)) != 0) MD5_Update (&mdContext, data, bytes); MD5_Final (c,&mdContext); for(i = 0; i < MD5_DIGEST_LENGTH; i++) sprintf(md5,"%s%02X", md5,c[i]); fclose (inFile); return md5; } Dla BSD mam wynik: 50ABC11360E248FE8F73EE4249DC33A9 test.dll Dla Windowsa mam wynik: B01DF24711FF38375AE0AC888C9C63EC test.dll Nie mogę nigdzie znaleźć w internecie jak to poprawić ani też nie mam żadnego pomysłu skoro to te same biblioteki (OpenSSL). |
|
« 1 » |