Генерировать хэш-значение фиксированной длины в python для параметра url

Я работаю в python на appengine.

Я пытаюсь создать то, что эквивалентно значению «v» в URL- адресе youtube ( http://www.youtube.com/watch?v= XhMN0wlITLk ) для извлечения определенных объектов. Автомат данных генерирует ключ, но он слишком длинный (34 цифры). Я экспериментировал с hashlib, чтобы создать свой собственный, но опять же я получаю длинную строку. Я хотел бы сохранить его до 11 цифр (я не имею дело с огромным количеством сущностей), и буквы и цифры приемлемы.

Похоже, должно быть довольно стандартное решение. Я, вероятно, просто пропустил его.

2 Solutions collect form web for “Генерировать хэш-значение фиксированной длины в python для параметра url”

Вы можете использовать автоматически генерируемый целочисленный идентификатор ключа для генерации хэша. Простым способом генерации хэша будет преобразование целочисленного id в base62 (буквенно-цифровое). Чтобы получить объект, просто преобразуйте его в десятичный символ из base62 и используйте get_by_id для извлечения объекта.

Вот простая функция преобразования base62, которую я использовал в одном из моих приложений.

import string alphabet = string.letters + string.digits max = 11 def int_to_base62(num): if num == 0: return alphabet[0] arr = [] radix = len(alphabet) while num: arr.append(alphabet[num%radix]) num /= radix arr.reverse() return (alphabet[0] * (max - len(arr))) + ''.join(arr) def base62_to_int(str): radix = len(alphabet) power = len(str) - 1 num = 0 for char in str: num += alphabet.index(char) * (radix ** power) power -= 1 return num 

Если у вас есть значение, уникальное для каждого объекта, вы можете получить более короткую версию путем хэширования и усечения. Хэши, такие как md5 или sha1, хорошо перемешаны, что означает, что каждый бит на выходе имеет 50% вероятность перевернуться, если вы измените один бит на входе. Если вы усекаете хэш, вы просто увеличиваете вероятность столкновения, но вы можете сделать компромисс между длиной и шансами столкновения.

Url-safe base64 кодирование является хорошим вариантом для превращения хэша в текст.

 orig_id = 'weiowoeiwoeciw0eijw0eij029j20d232weifw0jiw0e20d2' # the original id shorter_id = base64.urlsafe_b64encode(hashlib.md5(orig_id).digest())[:11] 

В base64 у вас есть 6 бит информации на символ, 11 символов дают вам 66 бит уникальности или вероятность столкновения 1 в 2 ** 66.

  • Как извлечь доменное имя верхнего уровня (TLD) из URL-адреса
  • Python urlparse - вырезать доменное имя без субдомена
  • как удалить python 302 URL-адрес перенаправления
  • имеет любой простой способ получить полный url, используя python on gae
  • Применить относительный URL к абсолютному URL-адресу
  • Каков самый чистый способ извлечения URL-адресов из строки с помощью Python?
  • Сохранение URL-адресов во время Spidering
  • Python Найти Вопрос
  • Как преобразовать целое число в кратчайшую безопасную строку в Python?
  • Скрипт, который использует параметры и читает результаты
  • urllib.request.urlopen (url) с аутентификацией
  • Python - лучший язык программирования в мире.