我一直在查看hashlib文档,但还没有发现任何关于使用的东西 什么时候 哈希 数据。

帮助会很棒。

有帮助吗?

解决方案

萨米尔的答案是正确的,但有些神秘。基本上,盐只是您前缀或后缀数据的随机数据,以显着增加对散布值的字典攻击的复杂性。所以给盐 s 和数据 d 您只需采取以下操作即可生成盐的数据:

import hashlib
hashlib.sha512( s + d ).hexdigest()

看到这个 维基百科文章 更多细节

其他提示

只需将盐添加到您的敏感数据中:

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update('salt')
>>> m.update('sensitive data')
>>> m.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> n = hashlib.sha512()
>>> n.update('%ssensitive data' % 'salt')
>>> n.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> hashlib.sha512('salt' + 'sensitive data').hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'

盐分不是图书馆需要帮助您的神奇过程,而是提供的其他数据来阻止彩虹表工作。

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\xd0\xf4\xc1LH\xadH7\x90^\xa7R\x0c\xc4\xafp\x0fd3\xce\t\x85\xe6\xbb\x87\xb6\xb4a|\xb9D\xab\xf8\x14\xbdS\x96M\xdb\xf5[A\xe5\x81+:\xfe\x90\x89\x0c\nM\xb7\\\xb0Cg\xe19\xfdb\xea\xb2\xe1'
>>> m.update(b"My super-secret salt.")
>>> m.digest()
b'\xcd\xd7K\xd9!~\xa8\x1d6\x9b\xa6\xde\x06\t\x02\xa1+}\xaeNA\x94a`\xaa\xf4\xe9\xb5\xff\x1f\x9cE\x84m\xbb\x98U\xb4z\x92\x9e\xe8\xc9\xc2\xc8\x8f\x068e\xb0\r\xed\xb7\xde\x80\xa6,\n\x111w{\xa2\x9b'

如果您正在寻找crypt()的替代品,则较新版本的GLIBC具有基于SHA-512的“ $ 6 $”,带有可变迭代计数(请参阅 Ulrich Drepper的页面, ,具有描述并链接到完整的C实现 sha512_crypt_r()).

编写自己的加密货币是不可预见的 - 以上 sha512(salt+password) 无济于事。

为了产生盐,请使用类似的东西 os.urandom(16) 对于随机字节或 ''.join(map(lambda x:'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'[ord(x)%64], os.urandom(16))) 对于随机基本64类似字符(用于crypt() - alikes)。

(我说base64类似于PEM/MIME中的Base64。)

使用Passlib,编写自己的密码加密是失败的几乎确定方法。

如今,SHA512并不是存储哈希密码的好方法。您应该使用bcrypt或类似的东西。重要的是,盐是内置的,并且该算法具有重要的工作因素。

如果您只需将盐附加(或准备)将盐添加到明文中,那么您可以将盐添加到明文中,那么任何人都可以使用一组哈希密码并应用现代破解工具(http://arstechnica.com/security/2013/05/how-crackers-make-minced-minced-manced-meat-out-your-passwords/)将能够看到串联的密码+盐值,并可能通过琐碎的模式匹配,可以在大多数情况下将密码部分与盐部分分开。

我还没有一路考虑,我绝不是安全专家,但是在我看来,如果您要加密(例如使用AES256),则使用盐作为密钥的密码,并且然后哈希 使用SHA512,您可以免受我上面描述的脆弱性的安全。

但是,到那时,您所付出的努力比切换到BCRYPT所需要的更多,您仍然不会保护工作因素,因此,如果您的环境您的环境,我只会推荐这样的方法工作不提供该选项。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top