![]() |
хеширование
Доброго всем времени суток! Подскажите пожалуйста следующее - есть последовательность из 12 байт - существует ли алгоритм позволяющий ОДНОЗНАЧНО идентифицировать (не восстановить) эту последовательность чтобы хеш был равен 3-4 байтам и если таковой существует расскажите плз на пальцах как он работает
|
Нет.
А если просто с большой долей вероятности, то любые типа CRC32, например. |
Ну если надо тебе быстро сделать подпись блока данных то 4ре байта твоей подписи могут выглядеть например так : первые два байта это просто сумма блока побайтно а вторые 2 байта - это XOR вордов входящих в последовательность.
Если в 3 байта укладываться то первое так и оставляй сумму а третим байтом пускай побайтное исключающее ИЛИ. Это если я правильно понял задачу. |
Quote:
Методов паролирования - как грязи. Выбирайте на вкус :) |
Да просто вопрос кривовато поставлен и не совсем ясно что именно нужно топикстартеру. вопрос получается звучит примерно так - "у меня в руках электролампочка - как достоверно узнать что это электролампочка?".
И ответов может быть сотня минимум. |
Quote:
Простейшая хеш функция - это просто сумма всех байт, также популярна функция xor. Однако эти простые функции плохо идентифицируют периодические последовательности. Поэтому для идентификации используют более сложные функции, обычно принято пользоваться полиномиальным представлением. На 8 битных машинах часто использовали CRC8 и CRC16. Сейчас мощности машин стали выше, объемы данных больше, поэтому используют более сложные хеш функции типа MD5, SHA1, RIPEMD128, TIGER и т.п. По сути суть таких функций сводится все к той-же операции xor, которая выполняется не с фиксированным ключем, а с потоком псевдослучайных чисел формируемым генератором ПСП. Особенность таких сложных функций заключается в том что математически сложно подобрать исходные данные под конкретное значение хеша. Поэтому можно говорить об идентификации, но это не значит что идентификация "однозначная". |
Александр, пока топик стартер не выразится яснее - на чем( система или проц) с какими данными ( может это просто последовательность цифр от 0 до 11 например, а не рандомные данные), сколько разных данных в посылке может быть( например может всего 4 разных посылки существует так для такого случая хэш вообще не нужен), сколько памяти в системе где будет крутится алгоритм ( может это C51 старый контроллер и там рама всего 128 байт посему мд5 или SHA-1 особо не влезет туда) ,
какое быстродействие системы. Без четкого понимания как будет работать система и в каких условиях - невозможно дать правильный совет. А давать сотню советов на каждый конкретный случай - просто не интересно. |
Добавлю свои 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. |
Quote:
|
1 Attachment(s)
Quote:
я себе для удобства написал расширение для проводника, позволяет считать кучу разных хешей, см аттачмент :) Поддерживает и командную строку, например: Code:
hash.exe md5 filename.isohttp://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.