【问题标题】:python, hash function selectionpython,哈希函数选择
【发布时间】:2010-02-25 21:36:14
【问题描述】:

使用 Python 和 Django,我将让我的用户向他们的朋友赠送基于 pdf 的礼物,该朋友将能够通过通过电子邮件链接进入我的网站来索取 pdf。

这是计划

  1. 用户给他的朋友一个礼物,输入朋友的电子邮件

  2. 在后台保存一个礼品模型,其中包含一个唯一生成的哈希码。

  3. 朋友收到邮件,提供下载 pdf 的链接,类似于 (www.mydomain.com/gift/<hash code here>)

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

  5. 如果开始下载,则为 404。

这是解决这个问题的聪明方法吗?如果是这样,你会推荐什么散列函数?有趣的是 /gift/ 对公众开放,如果幸运地找到了链接,任何人都可以认领它。我打算通过接收者的名字加上礼物模型的 pk 来提供散列函数

【问题讨论】:

  • 我认为您的下载链接显示不正确.. 它缺少最后的哈希码
  • 已修复,感谢指出。

标签: python django hash hashcode


【解决方案1】:

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

  1. 创建一串随机字符
  2. 如果已使用(不太可能)重复步骤 1

让字符串足够长,让你很高兴很难猜到

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

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

【讨论】:

    【解决方案2】:

    UUID 非常随机

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

    【讨论】:

      【解决方案3】:

      它可能不会完全按照您希望的方式做事,但这个项目将是一个很好的起点:

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

      【讨论】:

        猜你喜欢
        • 2010-10-13
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 2016-03-04
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 2016-03-25
        相关资源
        最近更新 更多