Самый маленький встроенный хеш, который я знаю, это md5
>>> import hashlib, base64
>>> d=hashlib.md5(b"hello worlds").digest(); d=base64.b64encode(d);
>>> print(d)
b'S27ylES0wiLdFAGdUpFgCQ=='
Низкие столкновения и короткие являются несколько взаимоисключающими из-за парадокса дня рождения
Чтобы сделать его безопасным, вам нужно использовать функцию из модуля base64
>>> import base64
>>> base64.urlsafe_b64encode(hashlib.md5("hello world").digest())
'XrY7u-Ae7tCTyyK7j1rNww=='
Однако не должно возникнуть проблем с сохранением 16-байтового дайджеста md5 в базе данных в двоичном виде.
>>> md5bytes=hashlib.md5("hello world").digest()
>>> len(md5bytes)
16
>>> urllib.quote_plus(md5bytes)
'%5E%B6%3B%BB%E0%1E%EE%D0%93%CB%22%BB%8FZ%CD%C3'
Python 2
>>> base64.urlsafe_b64encode(md5bytes)
'XrY7u-Ae7tCTyyK7j1rNww=='
Python 3
>>> base64.urlsafe_b64encode(md5bytes).decode('ascii')
'XrY7u-Ae7tCTyyK7j1rNww=='
Вы можете выбрать quote_plus
или urlsafe_b64encode
для вашего URL, затем декодировать с помощью соответствующей функции unquote_plus
или urlsafe_b64decode
, прежде чем искать их в базе данных.