Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ Kalkulacja md5 pliku Windows/Unix

Ostatnio zmodyfikowano 2014-11-26 23:03
Autor Wiadomość
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).
P-121513
« 1 »
  Strona 1 z 1