【发布时间】:2014-05-19 00:46:05
【问题描述】:
我正在我公司当前的产品中实施一个新的密码存储过程。它是一个带有 MS SQL Server 的 ASP.NET 应用程序。
在他们使用同一个公共种子的 3DES 加密进行加密和检查用户身份验证之前,他们只是使用同一个种子解密了密码。
我正在实现一个 SHA256 哈希,其盐无法解密。
首先,我知道每个用户的每种盐都应该不同,但我不明白这种盐将存储在哪里?如果它存储在数据库中,这不就失去了它的用途吗?
我的想法是通过获取用户名的前 4 个字母、名字的前 3 个字母和姓氏的前 3 个字母来创建盐,并将其转换为 md5 哈希,然后将其用作盐没有存储在数据库中。
此序列将是服务器端的,因此没有源代码,任何黑客都无法知道该序列。
我在这里做的有什么问题吗?
SHA256 也可以接受,或者我应该查看 SHA512。
谢谢
【问题讨论】:
-
为什么说“每个用户的每种盐都应该不同”? 如果是这种情况,那么是的,您必须存储它,否则您将永远无法进行有效的比较。我将我的 SALT 定义为代码中的常量表达式;我部署的任何站点都没有被黑客入侵,尽管已经进行了几次尝试。如果这对他们来说足够好,它对你有用吗?
-
@sh1rts:您应该为每个用户使用随机盐。整个网站的单一盐会降低安全性(然后,一个彩虹表适用于您网站上的每个用户帐户)。
-
@sh1rts:对所有密码都相同的盐不是盐,它只是一些填充。
标签: asp.net sql-server vb.net security encryption