Создание хеша для данных больше, чем память (без зарядки) -- c++ поле с участием hash поле с участием murmurhash пол Связанный проблема

generating a hash for data larger than memory (without getting arrested)


2
vote

проблема

русский

Добрый послеобеденный переполнец! ;)

Что я хочу сделать:

Я заинтересован в проверке передаваемой целостности файлов.

Как я подошел к нему:

Я рассматривал возможность использования хэш-кода для этого, но есть одна проблема. Файлы могут быть чрезвычайно большими, поэтому мне нужно иметь возможность итеративно генерировать хеш. Я не могу загрузить весь файл в память.

Что я посмотрел до сих пор:

Я изучаю murmur3 и Mekin для хеш-функции. Я верю, что понимаю, как заставить его работать с помощью Skein, но версия, которую я построил, не удается, все известный результат. Я не уверен, как «церовать» шум, чтобы получить действительный результат.

Любые предложения?

Английский оригинал

Good afternoon Overflowers! ;)

What I want to do:

I'm interested in verifying transferred file integrity.

How I approached it:

I was considering using a hash code for this but there's one problem. The files can be extremely large so I need to be able to iteratively generate the hash. I can't load the entire file into memory.

What I've looked at so far:

I'm investigating murmur3 and skein for the hash function. I believe I understand how to make it work with skein but the version I've built fails all the known result unit tests. I'm not sure how to "chain" murmur to get a valid result.

Any suggestions?

</div
        
         
         

Список ответов

5
 
vote
vote
Лучший ответ
 

Большинство хэш-алгоритмов работают на фиксированных блоках данных - вы можете E.g. Посмотрите на справочные реализации SHA1 или MD5, они используют конструкцию «init / Loop {Update} / interize», что позволяет вам проходить как можно больше или мало данных, как вы хотите в каждом обновлении.

Глядя на E.g. Модуль, они используют ту же концепцию в своей справочной реализации:

 <код> int  Skein_256_Init  (Skein_256_Ctxt_t *ctx, size_t hashBitLen); int  Skein_256_Update(Skein_256_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt); int  Skein_256_Final (Skein_256_Ctxt_t *ctx, u08b_t * hashVal);   

Почему вы думаете, что вам нужно пройти все данные как один блок? Вы смотрите на упрощенную обертку функции?

 

Most hash algorithms operate on fixed-size blocks of data - you can e.g. look up SHA1 or MD5 reference implementations, they use an "init/loop { update }/finalize" construct allowing you to pass as much or little data as you wish in every update.

Looking at e.g. Skein, they use the same concept in their reference implementation:

int  Skein_256_Init  (Skein_256_Ctxt_t *ctx, size_t hashBitLen); int  Skein_256_Update(Skein_256_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt); int  Skein_256_Final (Skein_256_Ctxt_t *ctx, u08b_t * hashVal); 

Why do you think you need to pass the entire data as one block? Are you looking at simplified wrapper functions?

</div
 
 
     
     
1
 
vote

Вы должны посмотреть на crypto ++ . Это моя любимая библиотека Cryptographic C ++.

и Вот Как вы можете использовать его.

 

You should have a look at Crypto++. It's my favorite cryptographic C++ library.

And here's how you could use it.

</div
 
 

Связанный проблема

0  Libusb_Bulk_Transfer добавляет CRC?  ( Does libusb bulk transfer add crc ) 
Я пишу программу пользовательского интерфейса для устройства USB в C ++, используя Visual Studio 2019. Я использую библиотеку Libusb. Я хочу сделать объемную ...

1  Почему 64-битное целое расширение C ++ называется «долгим долгом»?  ( Why is the 64bit integer extension of c called long long ) 
В отличие от других типов: «int», "логический", "двойной" и т. Д. И даже таможенные классы, есть только одно слово. Однако только одно слово для их типа тольк...

-1  Бросить исключение, когда неправильный тип введен в  ( Throw exception when a wrong type is keyed in ) 
Я должен написать программу C ++, в которой функция состоит в том, чтобы прочитать два номера double Тип чисел из клавиатуры и добавить <код> try BLOCK, чт...

0  Как настроить VS2008 для эффективного развития C ++  ( How to setup vs2008 for efficient c development ) 
Обычно I Программируйте в C #, но были вынуждены выполнять работу в C ++. Похоже, что интеграция с Visual Studio (2008) действительно плохо по сравнению с C #...

0  Ошибка: аргумент типа "void (opca_hello ::) ()" не соответствует "void * (*) (void *)"  ( Error argument of type void opca hello does not match void void ) 
Я написал очень простой код для резьбы. Поскольку я очень новый для этого, я понятия не имею об ошибке. <код> class opca_hello { public: void hello(); } v...

0  Проблема дизайна - создание шрифта Global (C ++, Marmalade)  ( Design issue making a font global c marmalade ) 
У меня есть проект Marmalade C ++, где встроенный в шрифте не масштабируется на экран. Чтобы справиться с этим вопросом, я делаю пользовательский шрифт, котор...

2  Новый DataType, который может иметь количество до 100 цифр  ( New datatype which can have numbers upto 100 digits ) 
Примечание. Это был вопрос интервью и может не иметь фактического случая использования в настоящее время Вопрос должен был разработать класс, который может ...

1  Не можете получить программу Math C ++ для работы [дубликата]  ( Cant get math c program to work ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  Правильный способ использования вариационного шаблона функции вызова со строковыми аргументами C ++  ( Proper way of using variadic template function call with string arguments c ) 
Здравствуйте, что не то, что я здесь делаю, используя вариадические шаблоны через строку? Как правильно использовать его для достижения заданий ниже? <код> ...

5  Что такое "для (x: y)"?  ( What is for x y ) 
Итак, я оглянулся на межпубки о нитках, и я пришел в блог / учебную вещь о нитках, но то, что меня смущено, была эта линия, которую он использовал <код> for...

57  Как сделать макрос C ++ вести себя как функция?  ( How do i make a c macro behave like a function ) 
Допустим, по какой-то причине вам нужно написать макрос: <код> MACRO(X,Y) . (давайте предположим, что есть веская причина, по которой вы не можете использова...

-1  Неожиданный идентификатор ошибки - не уверен, почему (C ++)  ( Unexpected error id not sure why c ) 
IM Реализация программы C ++, по соображениям проекта оно должно быть включено в один файл, поэтому я не могу поставить то, что вы обычно в отдельном файле за...

1  Шаблон статических классов через динамические связанные библиотеки  ( Template static classes across dynamic linked libraries ) 
У меня есть классовый класс со статическим значением, как это: <код> template <class TYPE> class A{ static TYPE value; }; в коде dll I назначаю ст...

501  Как использовать постоянную PI в C ++  ( How to use the pi constant in c ) 
Я хочу использовать постоянные и тригонометрические функции PI в некоторой программе C ++. Я получаю тригонометрические функции с помощью <код> include <math....

0  Использование аргументов Makefile без Foo =  ( Using makefile arguments without foo ) 
У меня есть makefile, который я использую для компиляции одного файла. Когда мне нужно пройти аргумент, я использую цель = TargetFile. Сценарий принимает ар...

Связанный проблема

0  Libusb_Bulk_Transfer добавляет CRC? 
1  Почему 64-битное целое расширение C ++ называется «долгим долгом»? 
-1  Бросить исключение, когда неправильный тип введен в 
0  Как настроить VS2008 для эффективного развития C ++ 
0  Ошибка: аргумент типа "void (opca_hello ::) ()" не соответствует "void * (*) (void *)" 
0  Проблема дизайна - создание шрифта Global (C ++, Marmalade) 
2  Новый DataType, который может иметь количество до 100 цифр 
1  Не можете получить программу Math C ++ для работы [дубликата] 
0  Правильный способ использования вариационного шаблона функции вызова со строковыми аргументами C ++ 
5  Что такое "для (x: y)"? 
57  Как сделать макрос C ++ вести себя как функция? 
-1  Неожиданный идентификатор ошибки - не уверен, почему (C ++) 
1  Шаблон статических классов через динамические связанные библиотеки 
501  Как использовать постоянную PI в C ++ 
0  Использование аргументов Makefile без Foo =