生成随机文件名安全和URL安全字符串

时间:2012-01-17 16:51:24

标签: python string random

我创建了一个用户将视频上传到服务器文件系统的系统,我需要一种为视频文件生成唯一文件名的方法。我应该使用random.getrandbits吗?有没有办法用字母和数字的组合来做到这一点?

3 个答案:

答案 0 :(得分:11)

这就是我使用的:

import base64
import uuid

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

我生成一个uuid,但是我使用的是字节而不是更大的十六进制版本或带有破折号的字节。然后我将其编码为URL安全的base-64字符串。这是一个比使用hex更短的字符串,但使用base64可以使字符串中的字符对文件,URL和大多数其他内容都是安全的。

一个问题是,即使使用urlsafe_b64encode,它总是希望'='的标志到最后,这不是那么安全。 '='符号用于解码base-64编码信息,因此如果您只是尝试生成随机字符串,那么您可以安全地删除它们:

str.replace('=', '')

答案 1 :(得分:3)

查看Universally unique identifiers (UUID)和Python的模块uuid

答案 2 :(得分:1)

您可以在Python 3.6中使用秘密模块。

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

此处有更多文档:https://docs.python.org/3/library/secrets.html