Кратчайший хэш в python для именования файлов кэша

Какой самый короткий хэш (в форме, используемой в имени файла, например, hexdigest) доступен в python? Мое приложение хочет сохранитьфайлы кеша для некоторых объектов. Объекты должны иметь уникальный repr (), поэтому они используются для «заполнения» имени файла. Я хочу создать возможно уникальное имя файла для каждого объекта (не так много). Они не должны сталкиваться, но если они это сделают, моему приложению будет просто не хватать кеша для этого объекта (и ему придется переиндексировать данные этого объекта, незначительные затраты для приложения).

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

Прямо сейчас я использую abs (hash (repr (obj))); это верно, строка хэш! Пока не найдено никаких коллизий, но я бы хотел иметь лучшую хэш-функцию. hashlib.md5 доступен в библиотеке python, но hexdigest очень длинный, если поместить его в имя файла. Альтернативы, с разумным сопротивлением столкновению?

Изменить: Вариант использования выглядит следующим образом: Загрузчик данных получает новый экземпляр объекта, переносящего данные. Уникальные типы имеют уникальный репр. так что если файл кеша дляhash(repr(obj)) существует, я распаковываю этот файл кеша и заменяю obj непечиненным объектом. Если было столкновение, и кэш был ложным совпадением, я замечаю. Поэтому, если у нас нет кеша или есть ложное совпадение, я вместо этого инициирую obj (перезагружая его данные).

Выводы (?)

str хеш в python может быть достаточно хорошим, я беспокоился только о его сопротивлении столкновению. Но если я могу хэш2**16 объектов с ним, это будет более чем достаточно.

Я узнал, как взять шестнадцатеричный хеш (из любого источника хеша) и сохранить его компактно с base64:

# 'h' is a string of hex digits 
bytes = "".join(chr(int(h[i:i+2], 16)) for i in xrange(0, len(h), 2))
hashstr = base64.urlsafe_b64encode(bytes).rstrip("=")

Ответы на вопрос(8)

Ваш ответ на вопрос