Python,哈希函数选择
我正在使用Python和Django,让我的用户可以给朋友送PDF格式的礼物。朋友可以通过收到的邮件链接访问我的网站来领取这些PDF。
这是我的计划:
用户给朋友送礼物,并输入朋友的邮箱。
在后台,会保存一个礼物模型,这个模型会生成一个独特的哈希代码。
朋友收到邮件,里面有一个下载PDF的链接,链接格式大概是 (
www.mydomain.com/gift/<哈希代码在这里>
)。当朋友点击邮件里的链接时,系统会检查是否存在这个哈希代码对应的礼物模型。
如果存在,下载就会开始;如果不存在,就会显示404错误。
这样做是不是一个聪明的解决方案?如果是的话,你推荐使用什么哈希函数?这很有趣,因为/gift/是公开的,如果有人运气好找到了链接,任何人都可以领取这个礼物。我打算用接收者的名字和姓氏加上礼物模型的主键来生成哈希。
3 个回答
0
这个项目可能不会完全按照你想的方式运行,但它是一个很好的起点:
1
UUID(通用唯一标识符)是非常随机的
In [13]: import uuid
In [14]: uuid.uuid4().hex
Out[14]: 'f7a7667e94574e32b3589f84ca35a98d'
6
其实不需要用哈希,只要一个随机的令牌就可以了。
- 先生成一串随机字符。
- 如果这串字符已经被用过(这种情况不太可能),就再重复第一步。
确保这串字符足够长,这样别人就不容易猜到。
生成随机字符串的一个简单方法是:
>>> import os
>>> os.urandom(10).encode('hex')
'3fa0c2f72ff275f48d66'
>>> os.urandom(20).encode('hex')
'ecc1143b3fc90bd99bcd609b326694f13291e3d1'
>>> os.urandom(30).encode('hex')
'd4a9a2cd7b48eca831e9805e68dd6f7db7275b654e55cdec603631a5a355'
>>>