在SQL Server中存储密码

10 浏览
0 Comments

在SQL Server中存储密码

在SQL Server 2008中,存储用户密码的推荐做法是什么?

我正在为一个内部网络存储用户详细信息,并希望获得关于存储用户姓名、密码和用户访问权限等信息的最佳建议。我打算创建一个nvarchar列,然后在插入表之前对该文本进行加密。

0
0 Comments

在存储密码时,常见的做法是让应用程序来处理加密(以及可选的解密),而数据库只存储密码。建议使用比过时的标准MD5更强大的加密算法。大多数.NET开发者似乎喜欢使用TDES算法。同意使用比MD5更强大的加密算法是明智的选择。MD5不是一种加密算法,而是一种哈希算法。同意。我想我没有明确说明,所以你得到一个赞 🙂

0
0 Comments

在SQL Server中存储密码的问题是出于对敏感数据的加密的考虑。然而,对于密码来说,你不应该需要知道原始值,并且由于任何加密的内容也可以被解密,你将使这些信息有可能被发现。

相反,你应该保留密码的哈希值。这个过程将值转换成一个非常复杂的校验和。根据这个哈希值,无法还原出原始密码,这增加了这些信息的安全性。当你想要知道某人是否给了你正确的密码时,你对他们给出的值进行哈希并比较哈希值。

安全是一个复杂的话题。即使使用了哈希,你仍然可能面临系统存在重大安全缺陷的情况。如果你的团队中没有其他人具备这种知识,寻求安全顾问的帮助也不是一个坏主意。

在大多数情况下,这是非常正确的。鉴于OP正在使用一个内部网络,可能会有一些情况(与内部网络上的其他应用程序集成需要登录),在这种情况下,能够检索密码是有用的。

然而,存储密码的哈希值也会带来一些问题。例如,如果你的系统被黑客攻击,并且他们能够获取到哈希值,他们可以使用彩虹表等技术进行破解。为了增加安全性,可以使用一些额外的技术,如盐值(salt)。

盐值是一个随机字符串,它与密码一起进行哈希。这样,即使两个用户的密码相同,由于盐值的不同,它们的哈希值也会不同。这增加了破解密码的难度。下面是一个示例代码,演示如何使用盐值对密码进行哈希:

string password = "password123";

string salt = GenerateSalt(); // 生成随机盐值

string hashedPassword = HashPassword(password, salt); // 使用盐值对密码进行哈希

bool isMatch = CompareHashedPassword("password123", hashedPassword, salt); // 对比哈希后的密码和原始密码

通过使用盐值,即使黑客能够获取到哈希值,他们也无法轻易破解密码。因此,存储密码的哈希值是一种更安全的方法,而不是存储原始密码。

总之,将密码存储在SQL Server中的问题是出于对敏感数据的安全性考虑。为了增加安全性,应该存储密码的哈希值而不是原始密码,并可以使用额外的技术如盐值来增加安全性。这样可以防止黑客轻易破解密码,保护用户的信息安全。

0
0 Comments

在SQL Server中存储密码的方式通常是使用密码的哈希函数进行存储,但是在进行哈希之前需要对密码进行“盐”处理。为了防止彩虹表攻击,盐处理密码是很重要的。

因此,你的表应该如下所示:

._______._________________.______________.

|user_id|hash |salt |

|-------|-----------------|--------------|

|12 |adsgasdg...|13%!#tQ!#3t...|

| |... |... |

当验证给定的密码是否与用户匹配时,你应该将盐连接到给定的密码上,然后计算结果字符串的哈希函数。如果哈希函数的输出与`hash`列相匹配,则密码正确。

然而,重要的是要理解盐哈希的特定原因——防止数据库访问者知道用户的任何密码(反向计算哈希函数输出被认为是一个困难的问题)。因此,例如,即使银行的数据库管理员可以访问所有列,也无法登录到你的银行账户。

如果你认为你的用户会将敏感密码(例如他们的Gmail账户密码)作为网站密码使用,那么你也应该考虑使用盐哈希。

在我看来,这并不总是一个必需的安全特性,所以你应该考虑是否需要它。

可以参考这篇文章来了解有关这种机制的详细信息。

更新: 值得一提的是,为了增加反向计算个别密码哈希的有针对性攻击的安全性,你应该使用bcrypt,它的计算复杂度可以任意设置(但是除非你真的担心黑衣人针对你的特定数据库,否则我认为sha1已经足够安全了。为了这种额外的安全性,我不会为我的项目引入另一个依赖项。尽管如此,使用sha1 100次也是可以的,这会产生类似的效果)。

以上链接可能无法访问,但是这个链接可以访问。谢谢,之前的链接已经失效,我会更新链接。

0