2011-11-26 52 views
1

哪种方法更安全,有哪些缺点?键控或盐渍散列?

// Using a salt. 
$keyed_hash = hash_hmac("sha512", $string.$salt); 

// Using a key. 
$keyed_hash = hash_hmac("sha512", $string, $key); 
+1

你甚至没有描述你想要使用这些哈希值。对于密码也不是一个好主意。 – CodesInChaos

+0

如果您使用hmac进行密码存储,则应该使用$ key部分,否则为什么要使用hmac? – rook

+3

这个问题适用于SO,因为它询问哪种方法更好。答案将得到事实支持(因此它不是基于意见的)并且它具有所需的全部信息。 –

回答

3

你在做什么?总的来说,它们有不同的用途,但是如果您打算使用它们来存储密码,则它们大致相同。如果盐是随机的(因为它必须是),最终的结果是相似的,关键是随机的。如果你对所有的东西(或相同的盐)使用相同的密钥,那么安全级别会急剧下降。您必须分别存储密钥或盐,但是如果有人看到它(只要您使用的是64位随机数)就没有关系。HMAC计算比简单的SHA512计算计算密集得多。如果你的目的是让攻击者更努力工作,那就更好了。但是对于大多数用途来说,使用64位盐的更简单的SHA512就足够了。

请注意,在2012年底,将会选择新的SHA3算法; NIST正处于竞争的后期阶段,即选择一种新算法来替代SHA2算法,其中SHA512是一个样本。

+0

2014年,我不确定我会非常轻率地回答。计算上的要求也不足以成为黑客的主要威慑手段。还有其他相关的问题将提供迭代哈希等的答案。要小心。 –