使用盐在SHA512中哈希? - Python

Rad*_*Hex 38 python salt sha saltedhash hashlib

我一直在查看hashlib文档但是在散列数据时没有找到任何关于使用salt的内容.

帮助会很棒.

Rak*_*kis 72

萨米尔的答案是正确的,但有点神秘.基本上,salt只是随机派生的数据位,您可以使用前缀或后缀来大大增加字典攻击对哈希值的复杂性.因此,给定盐s和数据,d您只需执行以下操作即可生成数据的盐渍哈希:

import hashlib
hashlib.sha512( s + d ).hexdigest()
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此维基百科文章


Jas*_*lle 18

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

>>> 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'
Run Code Online (Sandbox Code Playgroud)


Sam*_*war 8

Salting不是图书馆需要帮助您的神奇过程 - 它只是为了阻止彩虹表工作而提供的额外数据.

>>> 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'
Run Code Online (Sandbox Code Playgroud)


tc.*_*tc. 7

如果您正在寻找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)))随机base64相似的字符(用于crypt() - 相似).

(我说base64相似它与PEM/MIME中的Base64不同.)