хэш md5 или crc32, какой использовать в этом случае - PullRequest
1 голос
/ 15 августа 2011

Мне нужен хеш, который может быть представлен менее чем в 26 символах. Md5 выдает строку длиной 32 символа, если преобразовать ее в base 36 насколько это будет хорошо,

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

        $hash=md5( str_ireplace(".","",microtime()).md5($input_data) )  ;
        $unique_id= base_convert($hash,16,36) ;

должен идти так или использовать crc32, который даст меньший размер хэша, но я боюсь, что это не будет таким уникальным?

1 Ответ

1 голос
/ 15 августа 2011

Я думаю, что могло бы быть гораздо более простое решение.

Согласно вашему утверждению, у вас есть 26 знаков пробела. Однако, чтобы уточнить, что я понимаю как персонаж, и что вы понимаете под персонажем, давайте немного покопаемся.

MD5 хэш в соотв. в Википедии выдает 16 байтов хэшей.

Алгоритм CRC32 генерирует 4-х байтовые хэши.

Я понимаю "символы" (в самом простом смысле) как символы ASCII. Каждый символ ascii (например, A = 65) имеет длину 8 бит.

Аглоритм MD5 имеет 16 байтов * 8 бит на байт = 128 бит, CRC32 - 32 бита.

Вы должны понимать, что хеши не являются математически уникальными, но "могут быть уникальными".

Таким образом, мое решение, учитывая ваше описание, было бы представить биты хэша как символы ascii.

Если у вас есть выбор только между MD5 и CRC32, ответ будет MD5. Но вы также можете добавить строку SHA-1 160-битный хэш <26 символов (длина будет 20 символов ascii). </strong>

Если вас беспокоит набор символов, который использует каждый хеш, оба хеша находятся в наборе [A-Za-z0-9] (я полагаю).

Наконец, когда вы конвертируете то, что по существу является числами, из одной базы в другую, число не меняется, поэтому сила алгоритма не меняется; это просто меняет способ представления числа.

...