PHP: короткий идентификатор, подобный Youtube, с солью

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

Следующий фрагмент кажется, что он будет делать то, что мне нужно (из http://programanddesign.com/php/base62-encode/ )

function encode($val, $base=62, $chars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') { // can't handle numbers larger than 2^31-1 = 2147483647 $str = ''; do { $i = $val % $base; $str = $chars[$i] . $str; $val = ($val - $i) / $base; } while($val > 0); return $str; } function decode($str, $base=62, $chars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') { $len = strlen($str); $val = 0; $arr = array_flip(str_split($chars)); for($i = 0; $i < $len; ++$i) { $val += $arr[$str[$i]] * pow($base, $len-$i-1); } return $val; } echo encode(2147483647); // outputs 2lkCB1 

Я, вероятно, немного изменю функции:

  1. Удалите параметр $ base; которые могут быть вычислены strlen ($ chars)
  2. Устраните из букв / цифр набора символов, которые могут быть сбиты друг с другом (например, 0, O, o)

Как изменить сценарий, чтобы я мог использовать соль? И будет ли это мудрой идеей? Могу ли я непреднамеренно увеличить вероятность столкновения и т. Д.?

Если вы хотите сделать числовой идентификатор неопознанным из строки, вы можете использовать соль. Вы должны иметь возможность вернуть идентификатор без столкновений. Сообщение Создать короткие идентификаторы с помощью PHP – Like Youtube или TinyURL от Kevin van Zonneveld – хорошее начало. Во всяком случае, проверьте уникальность.

Не могли бы вы просто использовать функцию uniqid PHP для генерации произвольной случайной строки из текущей метки времени? Затем сохраните эту буквенно-цифровую строку в видеозаписи во время загрузки.