C ++ (победа) OpenSSL MD5 Crash - PullRequest
       84

C ++ (победа) OpenSSL MD5 Crash

1 голос
/ 11 января 2012

Я застрял на один день на реализации openssl (на windows) md5.Такая простая вещь кажется, что она берет навсегда.Вылетает @ MD5_Update при запуске.Есть ли что-то, чего мне не хватает, и, если да, какие-нибудь полезные советы по улучшению моего кода, чтобы я никогда не делал это снова?Я следовал за этими документами: http://www.openssl.org/docs/crypto/md5.html Спасибо.Я действительно ценю это.: -)

#include <iostream>
#include <iomanip>
#include <openssl/md5.h>
using namespace std;

int main()
{
    unsigned char data[] = {0xd1, 0x31, 0xdd, 0x02, 0xc5, 0xe6, 0xee, 0xc4, 0x69, 0x3d, 0x9a, 0x06, 0x98, 0xaf, 0xf9, 0x5c};
    unsigned char hash[16];
    MD5_CTX *c;
    MD5_Update(c,data,16);
    MD5_Final(hash, c);

    for(int i=0;i<16;i++)
    cout << setfill('0') << setw(2) << hex << (int)hash[i] << " ";

    int a;
    cin >> a;
    return 0;
}

1 Ответ

2 голосов
/ 11 января 2012

Вы никогда не создаете и не выделяете место для хранения контекста MD5.

MD5_CTX *c;
MD5_Update(c,data,16);

Вы не можете использовать переменную, пока не назначите ей значение!После вашей первой строки c имеет произвольное нежелательное значение, которое вы затем передаете в MD5_Update!

Try:

MD5_CTX c;
MD5_Init(&c);
MD5_Update(&c, data, 16);
...