Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 44
1

Хеш двух файлов

07.01.2016, 20:00. Показов 1512. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток) У меня есть два фала(txt), с разными текстами, но одинаковом размером. При получение хеша этих фалов, они совпадают. Не могу понять почему? Буду признателен за помощь.

p.s. функция хеширования принимают строку байт фала, получаю я ее так.
C++
1
2
3
4
5
std::ifstream in("D:\\Test2.txt", std::ios::in | std::ios::binary);
    in.seekg(0, std::ios::end);
    int size = in.tellg();
    _int8* Byte = new _int8[size];
    in >> Byte;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2016, 20:00
Ответы с готовыми решениями:

Рекурсивное переименование файлов, md5-хеш которых совпадает с md5-хешем, указанном в списке файлов
Есть файл из двух колонок md5-хеш и имя файла (краткое, с расширением, UTF-8). Есть каталог с...

Нужен пример поиска файлов по хеш-сумме
Мне нужен хоть маленький, кодик который может искать файлы по их хеш сумме (в определённой папке)...

Поиск совпадающих полей в двух хеш-массивах
Захотел реализовать следующую задачку. Создать 2 хеш-массива с именами полей val1, val2, val3....

WiLD: SFC и хеш-сумма. Проверка системных файлов*
Обсуждение части проекта: https://www.cyberforum.ru/cmd-bat/thread866656.html

12
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
07.01.2016, 21:06 2
Цитата Сообщение от ALEXDOC Посмотреть сообщение
хеша
А где вы его получаете? Какой алгоритм использовать думаете?
Вот вам CRC32
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
126
127
128
129
130
//crc и size func
uint32_t GetCRC32 (const char * files, uint32_t crc = 0xffffffff);
uint32_t update_crc32(uint32_t crc, const unsigned char * data, size_t len);
uint32_t crc32(const unsigned char * buf, size_t len);
unsigned long long calcCRC32SumFolder( char const * dir, uint32_t crc =  0xffffffff );
 
uint32_t update_crc32(uint32_t crc, unsigned const char * data, size_t len)
{
    static const uint32_t table[256] =
    {
      0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
      0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
      0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
      0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
      0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
      0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
      0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
      0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
      0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
      0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
      0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
      0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
      0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
      0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
      0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
      0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
      0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
      0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
      0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
      0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
      0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
      0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
      0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
      0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
      0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
      0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
      0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
      0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
      0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
      0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
      0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
      0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
      0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
      0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
      0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
      0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
      0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
      0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
      0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
      0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
      0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
      0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
      0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
      0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
      0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
      0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
      0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
      0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
      0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
      0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
      0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
      0x2d02ef8dL
    };
    while(len--)
    {
        crc = table[(crc ^ *data++) & 0xff] ^ (crc >> 8);
    }
    return crc;
}
 
uint32_t crc32(unsigned const char * buf, size_t len)
{
    return ~update_crc32(0xffffffff, buf, len);
}
 
uint32_t GetCRC32 (const char * files, uint32_t crc )
{
    enum { chunk_size = 128 };
    FILE * f = fopen(files, "rb");
        if(f)
        {
            unsigned char chunk[chunk_size];
            int len = 0;
            do
            {
                len = fread(chunk, 1, sizeof(chunk), f);
                if(len > 0) crc = update_crc32(crc, chunk, len);
            }
            while(len > 0);
            fclose(f);
        }
        return crc; //!!!
        std::cout << crc << std::endl;
}
 
unsigned long long calcCRC32SumFolder( char const * dir, uint32_t crc)
{
 
    static int err_code = 0;
    unsigned long long  sumCRC32Folder = 0;
 
    DIR *dp;
    struct dirent *ent;
    struct stat buf;
 
    if ( ( dp = opendir( dir ) ) == NULL )
    {
        err_code = 1;
        return -1;
    }
    chdir( dir );
    while ( ( ent = readdir( dp ) ) != NULL && !err_code)
        {
            lstat( ent->d_name, &buf );
            if ( S_ISDIR( buf.st_mode ) )
            {
                if ( strcmp( ".", ent->d_name ) == 0 || strcmp( "..", ent->d_name ) == 0 ) continue;
 
                crc = calcCRC32SumFolder(ent->d_name, crc);
                if ( err_code ) return -1;
            } else {
                crc = GetCRC32(ent->d_name, crc);
            }
        }
    chdir( ".." );
    closedir( dp );
//    std::cout << ~sumCRC32Folder << std::endl;
    return sumCRC32Folder;
 
}
0
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 44
07.01.2016, 21:12  [ТС] 3
Я использую Blake 512, писал не сам. Хотелось бы его и оставить
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
07.01.2016, 21:14 4
ALEXDOC, Вот вам алгоритм получения Blake 256/512
0
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 44
07.01.2016, 21:29  [ТС] 5
Алгоритм у меня есть, но я не могу понять, плчему два разных тестовых файла, одинаковых по объёму имеют одинаковый хеш
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
07.01.2016, 21:33 6
ALEXDOC, А ткни носом где ты в своем коде получаешь хеш сумму файла, применяя алгоритм ???
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
07.01.2016, 21:44 7
И с каких пор >> умеет читать массивы? in >> Byte; in.read((char*)Byte,size);
1
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 44
07.01.2016, 21:45  [ТС] 8
Mesteriis, 1 - "при получение хеша" по-моему подразумевает, что хеш я получил, и алгоритм у меня есть.
2 - а к коду я оставил комментарий, что это просто получение байт файла.
Алгоритм хеширования брал здесь - https://github.com/ventaquil/B... r/main.cpp
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
07.01.2016, 21:47 9
Лучший ответ Сообщение было отмечено ALEXDOC как решение

Решение

Цитата Сообщение от ALEXDOC Посмотреть сообщение
in.seekg(0, std::ios::end);
Алсо, перед чтением, надо вернуть позицию чтения на место (in.seekg(0)).
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
07.01.2016, 22:02 10
попробуйте свой код заменить на временно на Сишный и проверьте что будет.

C++
1
2
3
4
5
6
7
8
9
10
#include <cstdio>
 
char ch;// _int8 - это тот же char
FILE* fp; // указатель на файл
fp=fopen("D:\\Test2.txt",rb);// открываем файл в режиме бинарного чтения
do{
ch=getc(fp); // читаем символ
//здесь считайте ваш хэш
} while (ch!=EOF);// читаем файл пока он не закончится
fclose(fp);

Добавлено через 5 минут
ALEXDOC, алгоритм работает с диапазоном -127 .. +128? просто вникать не охото.
0
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 44
07.01.2016, 22:07  [ТС] 11
SergioO, возможно я чего-то не понял, о вы мне предлагаете считывать хеш с одного символа?
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
07.01.2016, 22:55 12
вот так правильно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdio>
#include <cstdlib>
 
int main()
{
    FILE* fp = std::fopen("D:\\test2.txt", "rb"); // открываем файл для бинарного чтения
    if(!fp) {
        std::perror("File opening failed"); // ошибка открытия файла
        return EXIT_FAILURE;
    }
 
    int c; // нужен именно int не char и не _int8 для handle EOF
    while ((c = std::fgetc(fp)) != EOF) {  // стандартный цикл чтения всего файла... именно файла!
      //здесь  считаем хэш
    }
 
    if (std::ferror(fp))
        std::puts("Ошибка ввода/вывода");
    else if (std::feof(fp))
        {std::puts("Конец файла"); fclose(fp);};
}
Добавлено через 1 минуту
Цитата Сообщение от ALEXDOC Посмотреть сообщение
SergioO, возможно я чего-то не понял, о вы мне предлагаете считывать хеш с одного символа?
нет конечно )) сейчас код выше закомментирую подробно.

Добавлено через 33 минуты
Кстати, если препод чего наедет, типа не С++ , то в стандарте C++ 14 оно, вышенаписанное все есть и можно смело сослаться, те стандарт предусматривает два типа доступа к файловой системе один как вы начинали писать и второй так(в стиле Си, но в С++ стандарт попадает)
1
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 44
07.01.2016, 23:38  [ТС] 13
Да у меня нет препода,в школе пока, сам это осваиваю. Но все равно спасибо за помощь.
0
07.01.2016, 23:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2016, 23:38
Помогаю со студенческими работами здесь

Извлечение файлов из iso: почему всегда разные хеш-суммы
Используя проводник или HaoZip Не пойму почему после извлечения файлов из iso каждый раз...

Проверка хеш-сумм файлов. Хеши записаны в текстовом файле
В ходе долгих поисков ,мучений,и помощи форумчан=) я выяснил как выполнить поиск файла в нужной...

Для формирования хеш-адреса использовать хеш-функцию универсального хеширования
Для формирования хеш-адреса использовать хеш-функцию универсального хеширования . Подскажите...

Почему у одинаковых по размеру DLL-файлов, скачанных с разных сайтов, отличаются хеш-суммы?
Хочу скопировать в папку Windows\system32 файл dbgeng.dll, проблема в том что я его скачал с...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru