Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   хеширование (http://zx-pk.ru/showthread.php?t=17111)

mishutka 21st October 2011 16:11

хеширование
 
Доброго всем времени суток! Подскажите пожалуйста следующее - есть последовательность из 12 байт - существует ли алгоритм позволяющий ОДНОЗНАЧНО идентифицировать (не восстановить) эту последовательность чтобы хеш был равен 3-4 байтам и если таковой существует расскажите плз на пальцах как он работает

Titus 21st October 2011 16:27

Нет.
А если просто с большой долей вероятности, то любые типа CRC32, например.

balu_dark 21st October 2011 18:05

Ну если надо тебе быстро сделать подпись блока данных то 4ре байта твоей подписи могут выглядеть например так : первые два байта это просто сумма блока побайтно а вторые 2 байта - это XOR вордов входящих в последовательность.
Если в 3 байта укладываться то первое так и оставляй сумму а третим байтом пускай побайтное исключающее ИЛИ.
Это если я правильно понял задачу.

Destr 21st October 2011 18:10

Quote:

Originally Posted by mishutka (Post 426836)
ОДНОЗНАЧНО идентифицировать

По сути это пароль получается.
Методов паролирования - как грязи.
Выбирайте на вкус :)

balu_dark 21st October 2011 23:01

Да просто вопрос кривовато поставлен и не совсем ясно что именно нужно топикстартеру. вопрос получается звучит примерно так - "у меня в руках электролампочка - как достоверно узнать что это электролампочка?".
И ответов может быть сотня минимум.

ZXMAK 21st October 2011 23:17

Quote:

Originally Posted by mishutka (Post 426836)
Доброго всем времени суток! Подскажите пожалуйста следующее - есть последовательность из 12 байт - существует ли алгоритм позволяющий ОДНОЗНАЧНО идентифицировать (не восстановить) эту последовательность чтобы хеш был равен 3-4 байтам и если таковой существует расскажите плз на пальцах как он работает

однозначно идентифицировать 4-мя байтами массив из 12 байт невозможно. т.к. в 12 байтах можно разместить наааамного больше комбинаций, чем в 4-ех. Хеши используются для идентификации с некоторой вероятностью.
Простейшая хеш функция - это просто сумма всех байт, также популярна функция xor. Однако эти простые функции плохо идентифицируют периодические последовательности. Поэтому для идентификации используют более сложные функции, обычно принято пользоваться полиномиальным представлением. На 8 битных машинах часто использовали CRC8 и CRC16. Сейчас мощности машин стали выше, объемы данных больше, поэтому используют более сложные хеш функции типа MD5, SHA1, RIPEMD128, TIGER и т.п.
По сути суть таких функций сводится все к той-же операции xor, которая выполняется не с фиксированным ключем, а с потоком псевдослучайных чисел формируемым генератором ПСП.

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

balu_dark 21st October 2011 23:58

Александр, пока топик стартер не выразится яснее - на чем( система или проц) с какими данными ( может это просто последовательность цифр от 0 до 11 например, а не рандомные данные), сколько разных данных в посылке может быть( например может всего 4 разных посылки существует так для такого случая хэш вообще не нужен), сколько памяти в системе где будет крутится алгоритм ( может это C51 старый контроллер и там рама всего 128 байт посему мд5 или SHA-1 особо не влезет туда) ,
какое быстродействие системы.

Без четкого понимания как будет работать система и в каких условиях - невозможно дать правильный совет. А давать сотню советов на каждый конкретный случай - просто не интересно.

Barmaley_m 22nd October 2011 00:44

Добавлю свои 5 копеек. В этой теме не был упомянут один быстрый алгоритм хеширования, который лучше, чем просто сумма, хотя и хуже, чем CRC. Алгоритм называется "Fletcher's checksum" (контрольная сумма Флетчера). Согласно английской Википедии, алгоритм реализуется следующим образом.

Пусть исходная последовательность из n чисел представлена в виде байтов x[1], x[2], ..., x[n], Тогда определим последовательность частичных сумм:

c1[i] = x[1] + x[2] + ... + x[i] - сумма всех чисел последовательности с 1-го по i-e включительно (i<n)

Контрольная сумма Флетчера состоит из двух чисел. Первое из них - это простая сумма всех чисел исходной последовательности:
C1 = c1[n] = x[1] + x[2] + ... + x[n]
Второй компонент суммы Флетчера - это сумма последовательности частичных сумм, определенной ранее:

C2 = c1[1] + c1[2] + ... + c1[n].

Алгоритм вычисления на бейсике следующий:

10 LET n = 100
20 DIM x(n)
30 REM ... заполнить массив x какими-нибудь данными ...
40 LET C1 = 0
50 LET C2 = 0
60 FOR i=1 TO n
70 LET C1 = C1 + x(i)
80 LET C2 = C2 + C1
90 NEXT i
100 REM после выполнения программы C1 и C2 - сумма Флетчера от массива x.

Titus 22nd October 2011 00:59

Quote:

Originally Posted by Barmaley_m (Post 427016)
Добавлю свои 5 копеек. В этой теме не был упомянут один быстрый алгоритм хеширования, который лучше, чем просто сумма, хотя и хуже, чем CRC. Алгоритм называется "Fletcher's checksum" (контрольная сумма Флетчера).

Хороший и быстрый алгоритм. Главное устойчив к перестановке байт, в отличие от простой суммы или простого XOR. Единственное, считаю, что можно в итоге пользоватьс лишь C2, т.к. именно она усточйчива к перемене мест байт в потоке.

ZXMAK 22nd October 2011 01:39

1 Attachment(s)
Quote:

Originally Posted by Titus (Post 427020)
Хороший и быстрый алгоритм. Главное устойчив к перестановке байт, в отличие от простой суммы или простого XOR. Единственное, считаю, что можно в итоге пользоватьс лишь C2, т.к. именно она усточйчива к перемене мест байт в потоке.

лучше всего использовать MD5 :)

я себе для удобства написал расширение для проводника, позволяет считать кучу разных хешей, см аттачмент :)
Поддерживает и командную строку, например:
Code:

hash.exe md5 filename.iso

http://img692.imageshack.us/img692/3507/hash1.png

http://img508.imageshack.us/img508/9909/hash2.png


All times are GMT +4. The time now is 21:00.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.