python,哈希函数选择

时间:2010-02-25 21:36:14

标签: python django hash hashcode

使用Python和Django,我会让我的用户给他们的朋友提供基于pdf的礼物,所述朋友可以通过电子邮件链接进入我的网站来索取pdf。

这是计划

  1. 用户给他的朋友一个给,给朋友发电子邮件

  2. 在后台保存礼品模型,该模型将在保存时包含唯一生成的哈希代码。

  3. 朋友收到该电子邮件,前提是下载pdf的链接(www.mydomain.com/gift/<hash code here>

  4. 单击邮寄链接时,系统会检查是否存在具有给定哈希码的礼品模型。

  5. 如果是这样下载开始,否则为404。

  6. 这是一种解决这个问题的聪明方法吗?如果是这样,你会推荐什么样的散列函数?有趣的是,/ gift /对公众开放,如果以某种方式幸运地找到链接,任何人都可以声称它。我打算用接收器的姓氏加上礼物模型的pk来提供哈希函数

3 个答案:

答案 0 :(得分:6)

不需要使用哈希,只需要一个随机令牌。

  1. 创建一串随机字符
  2. 如果已经使用(不太可能),请重复步骤1
  3. 让字符串足够长,以至于你很高兴很难猜到

    生成随机字符串的简便方法是

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

答案 1 :(得分:1)

UUID非常随机

In [13]: import uuid

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

答案 2 :(得分:0)

它可能无法完全按照您的意愿行事,但这个项目将是一个很好的起点:

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