Генерация случайной строки, безопасной для имени файла и URL-адреса - PullRequest
7 голосов
/ 17 января 2012

Я создал систему, где пользователи загружают видео в файловую систему моего сервера, и мне нужен способ генерировать уникальные имена файлов для видеофайлов. Должен ли я использовать random.getrandbits? Есть ли способ сделать это с помощью комбинации букв и цифр?

Ответы [ 3 ]

11 голосов
/ 16 апреля 2012

Вот то, что я использую:

import base64
import uuid

base64.urlsafe_b64encode(uuid.uuid4().bytes)

Я генерирую uuid, но я использую байты вместо шестнадцатеричной версии большего размера или байта с тире.Затем я кодирую его в строку base-64, безопасную для URL.Это строка с более короткой длиной, чем при использовании hex, но использование base64 делает ее так, чтобы символы в строке были безопасны для файлов, URL-адресов и большинства других вещей.

Одна проблема заключается в том, что даже с кодом urlsafe_b64encode он всегдахочет подписать '=' на конце, которые не так безопасны для URL.Знаки '=' предназначены для декодирования закодированной в base-64 информации, поэтому, если вы пытаетесь только генерировать случайные строки, вы, вероятно, можете безопасно удалить их с помощью:

str.replace('=', '')
3 голосов
/ 17 января 2012

Взгляните на Universally unique identifiers (UUID) и модуль Python uuid.

1 голос
/ 11 декабря 2017

Вы можете использовать в Python 3.6 модуль секретов.

>>> import secrets
>>> secrets.token_urlsafe(8)
'Pxym7N2zJRs'

Дополнительная документация здесь: https://docs.python.org/3/library/secrets.html

...