Использую MD2 хеш-функцию. Не могу понять почему при одинаковых строках результат разный. И как тогда сравнивать их между собой после использование хещ-функции.
#include <iostream>
#include <openssl\mdc2.h>
using namespace std;
int main();
int main()
{
setlocale(LC_ALL, "ru"); // корректное отображение Кириллицы
char decrypted[128] = " ", message[128] = " ", IfFile[128] = " ", OfFile[128] = " ";
unsigned char userKey[128] = " "; // буфер промежуточного хранения считываемого из файла текста
int n;
MDC2_CTX md2;
unsigned char mdchar[3][100] = { "привет", "пока", "привет"};
MDC2_Init(&md2);
MDC2_Final(*mdchar, &md2);
cout << mdchar;
unsigned char md[10][MDC2_DIGEST_LENGTH];
int i;
MDC2_CTX c;
static char *text[2] = { "Hello" , "Hello"};
MDC2_Init(&c);
MDC2_Update(&c, (const unsigned char*)text[1], strlen(text[1]));
MDC2_Final(&(md[0][0]), &c);
MDC2_Update(&c, (const unsigned char*)text[0], strlen(text[0]));
MDC2_Final(&(md[1][0]), &c);
// cout << md[1];
for (i = 0; i < MDC2_DIGEST_LENGTH; i++)
printf("%02X", md[0][i]);
printf("\n");
for (i = 0; i < MDC2_DIGEST_LENGTH; i++)
printf("%02X", md[1][i]);
printf("\n");
int q;
cin >> q;
}
Этот код изменил
MDC2_Init(&c);
MDC2_Update(&c, (const unsigned char*)text[1], strlen(text[1]));
MDC2_Final(&(md[0][0]), &c);
На MDC2((const unsigned char*)s, strlen(s), md[nn]);
Как я понял это все из-за того что у меня было хеширование состояние теряло, и поэтому хэшировало по другому.
Вот рабочий код на Visual Studio 2015 с библиотекой OpenSSL. Может кому понадобиться.
#include "stdafx.h"
#include <openssl\camellia.h>
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
#include <openssl\mdc2.h>
using namespace std;
int main();
int main()
{
setlocale(LC_ALL, "ru"); // корректное отображение Кириллицы
vector<string> arr;
vector<string>::iterator i;
ifstream ifs;
string str;
ifs.open("file.txt");
if (!ifs.is_open()) {
cerr << "Can't open file" << endl;
return 1;
}
while (!ifs.eof()) {
getline(ifs, str);
arr.push_back(str);
}
ifs.close();
int nn = 0;
int size = arr.size();
unsigned char md[100][MDC2_DIGEST_LENGTH];
unsigned char qq[MDC2_DIGEST_LENGTH];
for (i = arr.begin(); i != arr.end(); i++)
{
//cout << *i << endl;
const char *s = (*i).c_str();
MDC2((const unsigned char*)s, strlen(s), md[nn]); //хеш - функция md2
nn++;
}
for (int j = 0; j < size; j++) {
cout << arr[j] << ": ";
for (int q = 0; q < MDC2_DIGEST_LENGTH; q++)
printf("%02X", md[j][q]);
printf("\n");
}
string nom;
unsigned char result[MDC2_DIGEST_LENGTH];
cout << "Введите строку для поиска: ";
cin >> nom;
const char *nomer = nom.c_str();
MDC2((const unsigned char*)nomer, strlen(nomer), result); //хеш-функция md2 для искомой строки
for (int q = 0; q < MDC2_DIGEST_LENGTH; q++)
printf("%02X", result[q]);
cout << " :";
for (int z = 0; z < size; z++)
{
if (memcmp(md[z], result, MDC2_DIGEST_LENGTH) == 0) //сравнивание строк
{
cout << "Подходит: " << arr[z] << endl;
break;
}
}
system("pause"); // Команда задержки экрана
return 0;
}
И само задание как звучало.
Преобразование строки с использованием хеш-функции MD2. На входе программы файл со списком строк, с помощью хеш-функции преобразуем все строки. Затем на вход подаем искомую строку, также с помощью хеш-функции преобразовываем ее и ищем в общем списке преобразованных строк.
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу собрать dll с помощью cmakeИспользую следующий код: