Hash Collision в довольно простом коде шифрования / дешифрования - PullRequest
1 голос
/ 16 июля 2009

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

Я нашел эту замечательную маленькую функцию из myphpscripts , и мне интересно, каковы шансы столкновения.

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

Я мог бы получить более 10 миллионов уникальных составных идентификаторов, и хочу быть уверен, что у меня не возникнет проблем.

function encode($string,$key) {
    $key = sha1($key);
    $strLen = strlen($string);
    $keyLen = strlen($key);
    $j=0;
    $hash='';
    for ($i = 0; $i < $strLen; $i++) {
        $ordStr = ord(substr($string,$i,1));
        if ($j == $keyLen) { $j = 0; }
        $ordKey = ord(substr($key,$j,1));
        $j++;
        $hash .= strrev(base_convert(dechex($ordStr + $ordKey),16,36));
    }
    return $hash;
}

1 Ответ

5 голосов
/ 16 июля 2009

Я думаю, вы немного смущены этой проблемой.

Проблема коллизий относится только к сопоставлениям, которые не 1-к-1, но "с потерями", то есть отображают несколько разных входов в один выход (например, хэши).

То, на что вы ссылались, выглядит как подпрограмма шифрования / дешифрования (если она работает правильно, которую я не проверял). Шифрование по определению означает, что существует соответствующее дешифрование, следовательно, отображение, определенное шифрованием , не может иметь коллизии (как вы не могли бы расшифровать в этом случае).

Так что ваш вопрос, как он опубликован, не имеет смысла.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...