Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 29.10.2017
Сообщений: 114

Ошибка компиляции хэш-функции SHA1

30.04.2018, 01:08. Показов 1375. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пытаюсь сделать задание: преобразование строки с использованием хеш-функции SHA1. На входе программы файл со списком строк, с помощью хеш-функции преобразуем все строки. Затем на вход подаем искомую строку, также с помощью хеш-функции преобразовываем ее и ищем в общем списке преобразованных строк.
Версия OpenSSL 1.1.1-pre5 (beta) 17 Apr 2018
При компиляции вылазит такая ошибка
Code
1
2
3
4
5
6
gcc sha1.c -o sha1 -lssl -lcrypto
/tmp/cc6cXY1P.o: In function `main':
sha1.c:(.text+0x415): undefined reference to `EVP_MD_CTX_free'
/tmp/cc6cXY1P.o: In function `init_evp':
sha1.c:(.text+0x4d9): undefined reference to `EVP_MD_CTX_new'
collect2: error: ld returned 1 exit status
Что может быть и нормальный ли алгоритм или как-то проще можно?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/evp.h>
#include <openssl/sha.h>
#include <stdbool.h>
 
//#ifndef EVP_MD_CTX_new
//# define EVP_MD_CTX_create()     EVP_MD_CTX_new()
//#endif
 
//#ifndef EVP_MD_CTX_free
//# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx))
//#endif
 
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
static void atexit_ssl_cleanup(void);
#endif
 
 
 
typedef struct 
{
    char* string;
    unsigned char md[EVP_MAX_MD_SIZE];
    int md_len;
} hash;
 
EVP_MD_CTX* mdctx;
const EVP_MD* md;
 
void init_evp();
void count_hash(hash* src);
bool md_compare(hash pair1, hash pair2);
 
int main(int argc, char const *argv[])
{
    if (argc < 2)
    {
        printf("Error\n");
        exit(1);
    }
    FILE* file = fopen(argv[1], "r");
    char buf[1024];
    init_evp();
    hash* hashes = malloc(sizeof(hash));
    int count = 0;
    while (fgets(buf, 1024, file)) {
        hashes = realloc(hashes, (count+1) * sizeof(hash));
        hashes[count].string = malloc((strlen(buf) + 1) * sizeof(char));
        strcpy(hashes[count].string, buf);
        count_hash(&hashes[count]);
        for (int j = 0; j < hashes[count].md_len; j++)
            printf("%02x", hashes[count].md[j]);
        printf("\n");
        count++;
    }
    fclose(file);
    hash findhash;
    file = fopen(argv[2], "r");
    if (!fgets(buf, 1024, file)) {
        printf("Error in findstr\n");
    }
    findhash.string = malloc((strlen(buf) + 1) * sizeof(char));
    strcpy(findhash.string, buf);
    fclose(file);
    count_hash(&findhash);
    printf("String to found:\n%s", findhash.string);
    printf("Digest is: ");
    for (int j = 0; j < findhash.md_len; j++)
        printf("%02x", findhash.md[j]);
    printf("\n");
    bool found = false;
    for (int i = 0; i < count; ++i)
    {
        if (md_compare(findhash, hashes[i]))
        {
            printf("String found. Index - %d\n", i+1);
            found = true;
            break;
        }
    }
    if (!found)
    {
        printf("String not found\n");
    }
    EVP_MD_CTX_free(mdctx);
    for (int i = 0; i < count; ++i)
    {
        free(hashes[i].string);
    }
    free(findhash.string);
    free(hashes);
    return 0;
}
 
void init_evp() {
    md = EVP_get_digestbyname("sha1");
    if (!md)
    {
        exit(1);
    }
    mdctx = EVP_MD_CTX_new();
}
 
void count_hash(hash* src) {
    EVP_DigestInit_ex(mdctx, md, NULL);
    EVP_DigestUpdate(mdctx, src->string, strlen(src->string));
    EVP_DigestFinal_ex(mdctx, src->md, &src->md_len);
}
 
bool md_compare(hash hash1, hash hash2) {
    if (hash1.md_len != hash2.md_len)
    {
        return false;
    }
    for (int i = 0; i < hash1.md_len; ++i)
    {
        if (hash1.md[i] != hash2.md[i])
        {
            return false;
        }
    }
    return true;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.04.2018, 01:08
Ответы с готовыми решениями:

Ошибка в получении sha1 (неверный хэш)
В любом онлайн сервисе показывает: sha1: А у меня: hex :

Sha1 хэш на java
Столкнулся с довольно странной проблемой. Есть код на php echo base64_encode(sha1(&quot;test&quot;, TRUE)); Cобственно задача - написать...

Хэш sha1 и md5
Посчитать хэш sha1 и md5 выбранный пользователем файл алгоритмом . Использовать стандартную реализацию алгоритмов в .NET. Для md5 этот...

2
653 / 161 / 64
Регистрация: 08.04.2015
Сообщений: 412
30.04.2018, 06:26
Попробуйте раскомментировать строки 8...14.
1
0 / 0 / 1
Регистрация: 29.10.2017
Сообщений: 114
30.04.2018, 14:28  [ТС]
UnknownSoldier, не помогает, я их закомментил поэтому. Не знаю что может быть.


У меня стоял OpenSSL 2012 года сначала, затем я поставил 2018, может быть как-то криво они стоят и из-за этого такая ерунда выходит

Всё скомпилировал)) #include <openssl/evp.h> не то что нужно было подключить)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2018, 14:28
Помогаю со студенческими работами здесь

Ввести в форму слово и получить его md5 и sha1 хэш.
Подскажите пожалуйста как ее использовать? &lt;?php $str = 'слово'; if (sha1($str) ===...

Ошибка в реализации хеш-функции SHA1
Здравствуйте, Решил написать простую реализацию, но результат вычислений оставляет желать лучшего Подскажите, пожалуйста, какой нюанс я...

Класс хэш-функции, выскакивает ошибка
Помогите разобраться в чем проблема, неправильно выдает результат class hash_{ private: std::string message; ...

Sha1, реализация аналога php функции
Помогите написать аналог php функции на c#,вот то что я написал,но результат не тот( StringBuilder majorsalt = new StringBuilder(); ...

Ошибка при компиляции функции
Суть задачи написать рекурсивную функцию вычисляющую факториал вот я вроде бы написал всё верно #include &lt;iostream&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru