当前位置:  开发笔记 > 编程语言 > 正文

在python中进行双向散列的最佳实践?

如何解决《在python中进行双向散列的最佳实践?》经验,为你挑选了1个好方法。

我想允许用户通过点击链接验证他们的电子邮件地址.链接看起来像

http://www.example.com/verifyemail?id=some-random-string

当我发送这封电子邮件时,我希望能够从用户的行id(一个整数)轻松生成这个"some-random-string".当用户点击此链接时,返回生成该整数.

唯一的要求是这个'some-random-string'应尽可能不透明且不可猜测.


最后,这就是我所确定的

def p3_encrypt_safe(plain, key):
    return base64.urlsafe_b64encode(p3_encrypt(plain, key))

使用http://www.nightsong.com/phr/crypto/p3.py中的nice crypto库 添加base64安全编码是我的.



1> DzinX..:

您最好的选择是生成某些用户数据的哈希(单向函数).例如,要生成用户行id的哈希值,您可以使用以下内容:

>>> import hashlib
>>> hashlib.sha1('3').hexdigest()
'77de68daecd823babbb58edb1c8e14d7106e83bb'

但是,仅将伪随机字符串基于行ID是不安全的,因为用户可以轻松地反转这样一个短字符串的散列(尝试使用googling 77de68daecd823babbb58edb1c8e14d7106e83bb).

这里一个简单的解决方案是对散列字符串进行"加盐",即将相同的秘密字符串添加到散列的每个值.例如:

>>> hashlib.sha1('3' + 'email@of.user' + 'somestringconstant').hexdigest()
'b3ca694a9987f39783a324f00cfe8279601decd3'

如果你谷歌b3ca694a9987f39783a324f00cfe8279601decd3,可能唯一的结果将是这个答案的链接:-),这不是一个证据,但一个很好的提示,这个哈希是非常独特的.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有