#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.