Как я могу использовать openssl / md5 в C для хэширования строки?

#c #openssl #aes #md5

#c #openssl #aes #md5

Вопрос:

Мне нужно хэшировать с помощью алгоритма md5 строку в моей программе. Существует библиотека openssl, но я новичок в этом. Как можно хэшировать строку, используя это, и где я могу найти хороший документ, который научит меня, как использовать эту библиотеку, а также с другими функциями, такими как aes?

Я пробовал этот код:

 int main()
{
    unsigned char result[MD5_DIGEST_LENGTH];
    const unsigned char* str;
    str = (unsigned char*)"hello";
    unsigned int long_size = 100;
    MD5(str,long_size,result);
}
 

Но компилятор сказал мне:
неопределенная ссылка на MD5 .

Почему существует и неопределенная ссылка на MD5 ?

Комментарии:

1. На самом деле не совсем ясно, что вы хотите сделать. MD5 — это не функция шифрования, а хэш-функция (которая в настоящее время считается нарушенной).

2. Да, я знаю. Например: str=hello md5(str)= 5d41402abc4b2a76b9719d911017c592 Я хочу использовать openssl / md5 для этого.

3. Длина ваших данных не превышает 100 байт…

4. #include <openssl/md5.h> и ссылка на lcrypto .

Ответ №1:

Вам следует ознакомиться с документацией. Одним из вариантов является использование этой функции:

 #include <openssl/md5.h>
unsigned char *MD5(const unsigned char *d, 
                   unsigned long n,
                   unsigned char *md);
 

На что они заявляют:

MD2(), MD4() и MD5() вычисляют дайджест сообщений MD2, MD4 и MD5 из n байтов в d и помещают его md (в котором должно быть место для MD2_DIGEST_LENGTH == MD4_DIGEST_LENGTH == MD5_DIGEST_LENGTH == 16 байт выходных данных). Если md равно NULL, то дайджест помещается в статический массив.

Что касается AES, если вы также хотите использовать OpenSSL, то взгляните на EVP doc и этот пример того, как его использовать. Просто обратите внимание, что вам нужно добавить

 #define AES_BLOCK_SIZE 16
 

Однако в верхней части файла, чтобы он работал.

Кстати. Я действительно могу порекомендовать библиотеку Crypto , так как она великолепна и имеет все виды криптографических примитивов; AES, эллиптические кривые, MAC, криптография с открытым ключом и так далее.

Комментарии:

1. Вам нужно добавить «#include <openssl/md5.h>» вверху, чтобы компилятор знал, откуда получить функцию MD5() .

2. И важно, чтобы вы также указали правильную длину данных MD5() . Другими словами, вместо 100 того, чтобы указывать, вы предоставляете его 5 , как long_size в вашем коде.

3. Я сделал это, но не работает. Я думаю, что в Eclipse есть ошибка … потому что каждая внешняя функция или библиотеки показывают одну и ту же ошибку «неопределенная ссылка на».

4. Ваша проблема связана с Eclipse, а не с самим кодом. Я сам не являюсь пользователем Eclipse, но я бы подумал, что вам, возможно, нужно «соединить» Eclipse с библиотекой OpenSSL.