C# 表中的密码字段应使用什么;MD5还是SHA1?
我决不是安全专家,甚至不是新手。我充其量只是个保安新手 有人建议我使用SHA1而不是MD5——为什么我会选择其中一个呢?一个更安全吗?MD5已被“破坏”,更高级别的安全现在实际上需要SHA-2。这是一本很有趣的书C# 表中的密码字段应使用什么;MD5还是SHA1?,c#,.net,cryptography,md5,sha1,C#,.net,Cryptography,Md5,Sha1,我决不是安全专家,甚至不是新手。我充其量只是个保安新手 有人建议我使用SHA1而不是MD5——为什么我会选择其中一个呢?一个更安全吗?MD5已被“破坏”,更高级别的安全现在实际上需要SHA-2。这是一本很有趣的书 编辑:晚9秒:)无论您使用哪种方法,请使用盐哈希法 祝你好运。存储便宜,处理器速度快。将1千字节盐与SHA-512配合使用。。Scheier也有一些新功能我至少会使用SHA2(256)-但是: 由于攻击,简单地对数据库中的密码进行哈希运算几乎没有意义。同样,salt散列也更好,但是如果
编辑:晚9秒:)无论您使用哪种方法,请使用盐哈希法
祝你好运。存储便宜,处理器速度快。将1千字节盐与SHA-512配合使用。。Scheier也有一些新功能我至少会使用SHA2(256)-但是: 由于攻击,简单地对数据库中的密码进行哈希运算几乎没有意义。同样,salt散列也更好,但是如果有人可以访问您的数据库,那么他们就有可能访问您的代码,在这种情况下,他们可能可以反汇编固定salt。同样,如果你使用随机盐,那么不管怎样,你都会将它存储在行中,因此当它减慢人们的速度时,他们仍然可以用彩虹表攻击它 更好的解决方案是使用随机盐以及随机(高)迭代次数,以便尝试对每个密码进行暴力攻击所需的时间明显更长,因此在物理上更难破解所有密码 我相信.Net可以通过使用PBKDF来实现这一点,但我错放了它的链接(有人向我提供了我刚才问的一个问题的答案)编辑找到了.Net的链接: 在MD5上
虽然MD5确实被证明是“坏的”,正如其他答案所提到的,但我不使用它的主要原因——以及为什么我读到它不适合使用——是因为它实际上非常快,从而增加了在给定时间内出现裂缝的可能性。MD5和SHA1都被认为是不安全的,SHA-1更好。但是,有两件事你应该考虑:
这不是任何人想到过的最安全的系统,但它很可能适用于您的系统。当心那些声称哈希算法“坏了”或“有缺陷”而没有说明算法有缺陷的原因的“cargo cult”回答。如果在数据库中存储普通的SHA-1密码散列,您的方法与MD5一样有缺陷(请参阅)。我相信,在将用户密码安全存储在数据库中的用例中,生成哈希冲突所需的时间不是很重要。正确的答案是使用salt,keyed hash,PBKDF2等+1-这是一个很好的例子,一个表面上看起来完全无辜的小问题,但实际上是一个进入一个更大、非常黑暗和非常重要的雷区的极好入口。密码很愚蠢。如果您想要明确(尽管未经验证)的安全性,则应使用客户端证书。无论攻击者获得您的数据库后,密码总是会被破坏,例如,如果他控制了正确的位置,他可以设置一个记录器来记录密码,然后再根据数据库对其进行加密和检查。或者他可以对散列进行并行暴力攻击。再说一次,一旦攻击者拥有你的基础设施中的任何东西,你基本上就完蛋了。@Longpoke——给你:我的密码哈希是2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、2、3、3、2、2、3、2、2、3、2、2、2、2、2、2、2、3、2、2、3、2、2、2、2、3、2、2、2、3、2、3、2、2、2、2、3、3、3、2、2、2、2、3、2、2、3、3、3、2、2、2、3、2、2、3、2、3、2、3、2、3、2、2、2、2、3、2、2、2、2、2、3、2、3、3、3、3 YN4WGCUA==“。其计算时间为{00:00:00.4656027}。这是一个可以在英语词典中找到的词。如果你能在合理的时间内说出我的密码,我真的很感动:)@Longpoke:3行C代码,只使用标准的.NET类。如果这是“太多的工作”,那么我想我已经证明了这三条线足以保护我的资产。如果您还想尝试,下面是“A”的散列:“3zyme1yzhl8bff6x99xdbspbm18givbckaau561gdthcmiwt2urk8z88l8f9sdayjfpfji06wl3 g5i4HlaAGTP4+adkwhpasfvqqzkjvwpopke40h6d7crk3xnkjaf5bzgfeiqupa0okmuyrzuu YA19ypJjo4+mz++6eJbjD4/hhhkffrpiezttw6eby3x4py9bur+