Sou*_*rav 9 php security encryption
是否有任何工作差异
$hash=sha1($key.$staticSalt);
Run Code Online (Sandbox Code Playgroud)
和
$hash=sha1($key.$randomSalt);
Run Code Online (Sandbox Code Playgroud)
如果我使用随机盐我需要将随机盐存储在数据库中,另一方面如果我使用固定盐,则无需使用DB!
如果代码可以被黑客攻击以查看salt(静态),那么黑客将能够使用哈希和随机盐查看数据库:D
那么它值得吗?
如果我喜欢盐@#kiss~89+.&&^me怎么办?
cee*_*yoz 10
随机盐具有巨大的益处.如果系统中的所有帐户都使用相同的盐,则攻击者可以强制计算该盐的哈希值,并且只需一次计算就可以进入所有帐户.如果他们每个帐户使用不同的盐,蛮力只会让您进入一个帐户.
虽然密码存储的最佳实践要求它们应该以具有独特盐的哈希格式存储,但原始问题实际上提出了一个相当好的观点:如果将盐存储在与哈希不同的位置,那些哈希的影响就是披露被降低.
1)如果密码只是哈希,并存储在数据库中,并且该站点遭受SQL注入,则攻击者可以"破解"哈希
2)如果使用salt对密码进行哈希处理,并且哈希和salt都在数据库中,并且站点有SQL注入,则攻击者可以"破解"哈希值,但需要更多的计算工作量(因为没有性能)从预先计算的表中提升)
3)如果密码是带盐的哈希值,并且盐存储在其他地方,则SQL注入会使攻击者无法确定实际密码.
场景1显然是最弱的,但2和3之间的安全性差异不那么明确,并且取决于SQL注入与服务器端代码泄露(以及相关的漏洞类别)的相对概率.
您更信任什么 - 您防范SQL注入的能力,或Apache/PHP /无论保护您的服务器端内容的能力.
事情从来都不简单,我实际上认为OP中的想法比其他答案更有意义.
(如果您希望在生成密码时存储在Web应用程序源中,则可以同时使用存储在数据库中的salt和"密钥").