Python,哈希函数选择

1 投票
3 回答
1138 浏览
提问于 2025-04-15 19:44

我正在使用Python和Django,让我的用户可以给朋友送PDF格式的礼物。朋友可以通过收到的邮件链接访问我的网站来领取这些PDF。

这是我的计划:

  1. 用户给朋友送礼物,并输入朋友的邮箱。

  2. 在后台,会保存一个礼物模型,这个模型会生成一个独特的哈希代码。

  3. 朋友收到邮件,里面有一个下载PDF的链接,链接格式大概是 (www.mydomain.com/gift/<哈希代码在这里>)。

  4. 当朋友点击邮件里的链接时,系统会检查是否存在这个哈希代码对应的礼物模型。

  5. 如果存在,下载就会开始;如果不存在,就会显示404错误。

这样做是不是一个聪明的解决方案?如果是的话,你推荐使用什么哈希函数?这很有趣,因为/gift/是公开的,如果有人运气好找到了链接,任何人都可以领取这个礼物。我打算用接收者的名字和姓氏加上礼物模型的主键来生成哈希。

3 个回答

0

这个项目可能不会完全按照你想的方式运行,但它是一个很好的起点:

http://github.com/mogga/django-token-auth/

1

UUID(通用唯一标识符)是非常随机的

In [13]: import uuid

In [14]: uuid.uuid4().hex
Out[14]: 'f7a7667e94574e32b3589f84ca35a98d'
6

其实不需要用哈希,只要一个随机的令牌就可以了。

  1. 先生成一串随机字符。
  2. 如果这串字符已经被用过(这种情况不太可能),就再重复第一步。

确保这串字符足够长,这样别人就不容易猜到。

生成随机字符串的一个简单方法是:

>>> import os
>>> os.urandom(10).encode('hex')
'3fa0c2f72ff275f48d66'
>>> os.urandom(20).encode('hex')
'ecc1143b3fc90bd99bcd609b326694f13291e3d1'
>>> os.urandom(30).encode('hex')
'd4a9a2cd7b48eca831e9805e68dd6f7db7275b654e55cdec603631a5a355'
>>> 

撰写回答