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

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

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

Прямо сейчас яm фактически использует abs (hash (repr (obj))); тот'верно, строка хеш! Haven»Я не нашел никаких коллизий, но я хотел бы иметь лучшую хэш-функцию. 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)

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