2012-06-15 2 views
1

Я прошел через эту страницу ...кратчайшее возможное значение хэш

http://www.php.net/manual/en/function.hash.php

MD5 длиной 32 символов, в то время как sha1 40. Для например,

$str = 'apple'; 

sha1 string d0be2dc421be4fcd0172e5afceea3970e2f3d940 
md5 string 1f3870be274f6c49b3e31a0c6728957f 

Даже если опция raw_output установлен в TRUE, то md5 дайджест вместо этого вернулся в необработанном двоичном формате с длиной 16.

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

Update: мне нужно меньшие строки по 3 причинам:

1) MySQL Archive таблица не кажется, чтобы индекс на столбец, который имеет более чем 8 символов

2) Я планирую использовать утилиту key-value, такую ​​как redis, которая любит более мелкие ключи

3) Безопасность здесь не проблема. Я хэширование столбцов, как «страна + Telco + оператор»

+2

Ну или вам нужно много бит (для многих информации), либо нет. Если это так, то почему бы не усечь строку хеша на требуемую длину? Пока вы всегда делаете то же самое, результат должен быть одинаковым (для равных входов). Но имейте в виду, что меньшее количество бит приводит к большей вероятности столкновения. – Nobody

+0

Для чего вам это нужно? Я почти не предполагаю, что вы хотите генерировать временные пароли, но помните, что хеши состоят только из 16 разных символов. Это меньше для паролей. – KingCrunch

+0

Вы должны добавить еще несколько объяснений, почему вы хотите создать хеш с 8 символами. Это очень вульгарно. Я боюсь, что вы можете совершить большую ошибку, которая последует за вами по вашему следу и проклинает ваш проект из самых внутренних. – Whisperity

ответ

2

Вы можете использовать метод crc32 для создания хэша, он создает 8 символов длинный хэш.

$hash = hash('crc32', $input, FALSE); 

Будьте чрезвычайно осторожен с этим методом, так как он полностью подвергается криптографическим атакам. Do NOT использовать это для любого вида чеканки безопасности.

+0

Это плохое предложение, если он использует его для целей безопасности ... –

+0

Действительно. Спасибо, что указали, что я забыл добавить уведомление к ответу. Я надеюсь, что собеседник изменит свой вопрос с более подробной информацией, где он/она хочет использовать этот метод. – Whisperity

-1
function short_hash($value, $length=8) { 
    return substr(md5($value), 0, $length); 
} 
0

Оставленный для меня, я предлагаю вам создать собственный алгоритм шифрования, который генерирует для вас 8 символов. Вы даже можете решить, например, сделать md5, SHA1 и SHA512 и объединить в соотношении 2: 3: 3, чтобы получить свой собственный код.

Смежные вопросы