如何从sha512消化物中提取盐?

时间:2015-07-23 11:29:06

标签: hash cryptography salt sha2

我使用salt字符串“world”编码(sha512 hash)密码字符串“hello”并将字符串保存在文件中。

hex: 2b83319d3e78544e4430c4f5621968fee8b6ffa1254678b2c6fb98f7f79ff16afee2da909a7bb741488ca3bacbbf6cec8fd226c5a52eef805ea65a352e2ece8e

base64: K4MxnT54VE5EMMT1Yhlo/ui2/6ElRniyxvuY9/ef8Wr+4tqQmnu3QUiMo7rLv2zsj9ImxaUu74Beplo1Li7Ojg== 

现在在我的程序中,我有上面编码的salted“hello”值和新密码字符串“hello”。我必须再次使用相同的盐编码“hello”并比较输出。是否有可能从上述输出中提取盐?

2 个答案:

答案 0 :(得分:3)

你无法检索"盐"从哈希。哈希函数是一种无法逆转的单向函数(只有暴力强制)。

由于您使用的是SHA-512且输出为512位长(128个十六进制编码的字节),因此根本没有存储盐的空间。当您使用其他数据(如salt)创建哈希时,您需要自己存储哈希值,或者使用生成字符串的函数来将此类附加数据编码到输出中。

如果您要对密码或其他易于暴力破解的数据进行哈希处理,请使用此类哈希函数的多次迭代,因为只有一次迭代是不够的。对于这些用例,通常使用PBKDF2,bcrypt或scrypt。

答案 1 :(得分:0)

当与用户密码连接时,salt本质上成为密码的一部分。您知道的这个复合密码的一部分(盐)和用户知道的部分。没有已知的方法可以从更好的散列函数的输出中识别密码或盐的单个位。对于任何外部派对,它们都应该与随机性无法区分,并且不可逆转。

因此,如果您有良好的盐并且没有存储它,您将永远不会找到成为密码生成的复合种子的连接字符串。或者至少不是没有粗暴的强迫它,这几乎永远都要做。