Как зашифровать строку стандартным PostgreSQL? - PullRequest
1 голос
/ 21 апреля 2011

Я работаю с PostgreSQL.

Мне нужно преобразовать "http://www.xyz.com/some_uri/index1.html" во что-то вроде" scdfdsffd "(некоторый уникальный ключ, основанный на URL, который является уникальным ключом в таблице).

Другими словами ... URL - это уникальный ключ в таблице, но мне нужно создать небольшой уникальный ключ на основе URL.

Что я могу сделать со стандартным PostgreSQL 8.4?

С наилучшими пожеланиями,

1 Ответ

4 голосов
/ 21 апреля 2011

Несколько методов:

a) Почему бы не использовать автоинкрементный столбец или генератор последовательности для генерации уникальных целых чисел на вставку? Если у вас менее 100 миллионов URL-адресов, ваши идентификаторы короткие и их легко запомнить. Однако, если это не вариант (например, потому что вы не хотите, чтобы люди угадывали идентификаторы и таким образом атаковали базу данных):

b) Встроенная функция MD5 () может помочь:

INSERT INTO table (pkey, url) VALUES (MD5('http://...'), 'http://...');

MD5 () - это хеш-функция, которая, скорее всего, даст вам уникальный идентификатор для каждого URL. Я говорю «скорее всего», потому что вы получаете 128-битный хеш от MD5, и вероятность коллизии хеша составляет порядка 2 ^ -128 (около 10 ^ -55).

Если вам нужны меньшие идентификаторы, вы можете разделить результат от MD5 до меньшего числа символов, но потенциально вы можете значительно увеличить вероятность коллизии хеша в зависимости от того, какие символы вы берете.

[Примечание: ответ с меткой времени отредактирован, поскольку он никоим образом не решает исходную проблему. -BobG]

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