Алгоритм хэширования

Тема в разделе "WASM.CRYPTO", создана пользователем vovka, 27 июн 2006.

  1. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    Привет.



    Подскажите алгоритм хэширования!



    У меня много файлов (на разных компах), мне надо найти

    изменённый, (...)

    Я хочу найти хэш файла а потом сравнивать!



    Скажите какой хороший??? Чтобы без коллизий !

    Спасибо!



    слышал про SHA?? это оно?
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    а нельзя ли просто время посл. модификации фиксировать?
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    неа, хекс-редакторы да и обычный патч восстанавливают даты (GetFileTime\SetFileTime)



    MD5 в три раза быстрее SHA1, обычно используют именно его
     
  4. RRaptor

    RRaptor New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    2
    Посмотри спецификацию Tiger, он быстро вычисляется и вроде без слабостей и коллизий.
     
  5. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    если требуется определить только модификацию, достаточно использовать crc32, поговаривают, что по скорости он сравним с md5, но зато реализация много проще.
    а если трбуется хорошая хеш-функция, чтобы без коллизей и стойкая (на сегодняшний день), я бы смотрел в сторону sha256.
    Читай Шнайдера, пока его еще более-менее легко найти в продаже.
    А если тебе кажется удобным читать с экрана - на drmist.narod.ru в самом низу ссылка на электронную версию (исходные коды прилогаются).
    В аттаче к этому посту ты найдешь исходники crc32, sha1 и sha256 на си.
     
  6. Crazy_Death

    Crazy_Death New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    16
    CRC-32 на асм

    Код (Text):
    1. format PE GUI 4.0
    2. entry start  
    3.  
    4. include 'win32a.inc'
    5. section '.data' data readable writeable
    6.   CrtTable rd 256
    7.   test_str db '123456789'
    8.  
    9. section '.code' code readable executable
    10.   start:
    11. xor ebx, ebx
    12. mov edx,CrtTable
    13. InitTableLoop:
    14. xor eax, eax
    15. mov al, bl
    16. xor ecx,ecx
    17. entryLoop:
    18. test eax, 1
    19. jz no_topbit
    20. shr eax, 1
    21. xor eax, 0edb88320h
    22. jmp entrygoon
    23. no_topbit:
    24. shr eax, 1
    25. entrygoon:
    26. inc ecx
    27. test ecx, 8
    28. jz entryLoop
    29. mov dword [ebx*4 + edx], eax
    30. inc ebx
    31. test ebx, 256
    32. jz InitTableLoop
    33.  
    34. mov eax,-1
    35. mov esi,test_str
    36. mov ecx,9
    37.  
    38. computeLoop:
    39. xor ebx, ebx
    40. xor al, [esi]
    41. mov bl, al
    42. shr eax, 8
    43. xor eax, dword [4*ebx + CrtTable]
    44. inc esi
    45. loop computeLoop
    46. xor eax, 0FFFFFFFFh
    47.  
    48.   exit:
    49.     invoke ExitProcess,0
    50.  
    51.  
    52. section '.idata' import data readable writeable
    53.   library kernel32,'KERNEL32.DLL'
    54.   include '\apia\kernel32.inc'
     
  7. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    в разделе исходников не так давно выкладывали сорсы крипто- и хэш-функций. там все это имеется.
     
  8. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Совсем без коллизий НЕЛЬЗЯ, это все-таки ХЕШ, а не побайтовое сравнение. На практике для такой задачи вполне достаточно CRC-32... да даже CRC-16 вполне потянет.
     
  9. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    iamlamer
    там под коллизиями обычно понимается не то, что один хеш так или иначе может соответствовать двум буферам, а то, что можно иначе, нежели перебором, подобрать два одинаковых хеша к одному буферу. кажется так.

    К исходнику Crazy_Death хочу добавить, что CrtTable как правило считается зарание. Кроме полинома 0edb88320h иногда используется 004c11db7h, то есть уществует как минимум две функции crc32 с разными таблицами.
     
  10. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    0edb88320h это перевётрнутый 004c11db7h
    11101101101110001000001100100000
    100110000010001110110110111
     
  11. Crazy_Death

    Crazy_Death New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    16
    2 drmist "Кроме полинома 0edb88320h иногда используется 004c11db7h"

    а в чем разница? 0edb88320h - использутеся в zip,rar
    а 004c11db7h где?
     
  12. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Используйте любой неприводимый в поле GF(2) полином 32й степени... И будет вам счастье)
     
  13. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    asmfan

    Используйте любой неприводимый в поле GF(2) полином 32й степени... И будет вам счастье)

    Только это будет уже не CRC-32, потому что "CRC-32" это не только аббревиатура от "циклического изыбточного кода", а что-то типа торговой марки, жестко зафиксированного наименования для жестко зафиксированного алгоритма, описанного в разных там IEEE, ISO, RFC и пр. Можно юзать любую подходящий порождающий полином, даже если для него математически строго доказано, что он не хуже стандартного. Но называть то, что получилось, "CRC-32", IMHO, нельзя.

    З.Ы. Особенно меня прикалывают некоторые статьи из, кажется, не помню, 29A с фразами типа "давайте рассчитаем CRC, для этого просто просуммируем все байты" и т.п.