python,哈希函数选择

python,哈希函数选择,python,django,hash,hashcode,Python,Django,Hash,Hashcode,使用Python和Django,我将允许我的用户向他们的朋友赠送基于pdf的礼物,他们的朋友可以通过电子邮件链接进入我的网站来索取pdf 这是计划 用户给他的朋友一个礼物,输入朋友的电子邮件 在后台,将保存一个礼品模型,该模型将在保存时包含唯一生成的哈希代码 朋友收到电子邮件,提供下载pdf的链接,类似于www.mydomain.com/gift/ 单击邮件链接时,系统会检查是否存在具有给定哈希代码的礼品模型 如果是这样,开始下载,否则404 这是解决这个问题的聪明方法吗?如果是的话,你会推荐什

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

这是计划

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

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

朋友收到电子邮件,提供下载pdf的链接,类似于www.mydomain.com/gift/

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

如果是这样,开始下载,否则404


这是解决这个问题的聪明方法吗?如果是的话,你会推荐什么样的散列函数?这很有趣,因为/gift/是向公众开放的,如果幸运地找到了链接,任何人都可以申请。我计划通过接收者的姓氏加上礼物模型的pk来输入哈希函数。它可能不会完全按照您希望的方式进行操作,但该项目将是一个很好的起点:


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


不需要使用散列,只需要一个随机令牌

创建一个随机字符字符串 如果已经使用,重复步骤1 让字符串足够长,使你高兴,这将很难猜测

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

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

不需要使用散列,只需要一个随机令牌

创建一个随机字符字符串 如果已经使用,重复步骤1 让字符串足够长,使你高兴,这将很难猜测

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

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

uuid是非常随机的

In [13]: import uuid

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

uuid是非常随机的

In [13]: import uuid

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

我认为你的下载链接显示不正确。。它的末尾缺少散列码修复了它,谢谢你指出它。我认为你的下载链接显示不正确。。它的末尾缺少散列码。修复了它,谢谢你指出它。