c# - 如何使用 C# 在 SQL Server 数据库中存储哈希值?

标签 c# .net sql-server hash

我正在尝试创建一个具有登录/注销功能的网站,并且我计划对密码进行适当的哈希处理和加盐处理。然而,我面临的问题是如何将密码存储在数据库中。我知道我需要将散列 + 加盐密码存储在数据库中(不是纯文本或纯加密),但我不知道如何从技术上解决将二进制数据插入数据库的问题。

在我早期的尝试中,我可以在数据库中获取数据的唯一方法是将二进制数据转换为 base64 字符串并插入到 varchar 密码字段中,但有些事情很明显我认为这不是正确的方法。

数据库中的密码字段目前是 varchar 但据我了解,散列密码是二进制的。所以即使我将密码字段更改为二进制对象,我仍然不知道如何实际插入它!

如果我没有任何意义,请要求澄清,我会尽快回复您。

最佳答案

在 Microsoft SQL Server 中,您可以将二进制数据存储在具有 binary 数据类型的列中(或者 varbinary,如果您需要可变长度数据)。您可以将其用于散列和加盐密码。如果您使用 512 位散列函数并且还想使用 512 位盐,则需要 2*512/8 = 128 字节(例如 binary(128) 来存储盐和散列。

通常,无论您使用什么 API 来读写数据库,都应该可以帮助您读写二进制数据。但是,也许您想使用一些 SQL 直接将二进制值插入表中。您可以使用这样的语法:

insert into MyTable values (0x123456789ABCDEF)

这不是您问题的真正答案,但如果您难以实现自己的密码功能,您可以考虑使用预构建的工业强度组件以避免将来出现令人尴尬的错误。例如 ASP.NET has a membership provider

关于c# - 如何使用 C# 在 SQL Server 数据库中存储哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252794/

相关文章:

c# - Mock.Of<对象> VS 模拟<对象>()

c# - 在 DataGrid 上显示 DataTable 列表

c# - LINQ to SQL,我如何获得在字段中找到的搜索词的计数?

c# - 在多种日志记录方法中使用 StreamWriter 的实例

sql-server - SQL Server CLR 内存分配

c# - 如何使用 [FromBody] 忽略 json 反序列化中的错误?

c# - C# “var” 关键字在 VB.NET 中的等效项是什么?

c# - 比较两种类型

.net - 过程需要未提供的参数

sql-server - Wix - 二进制文件中的 SQL 方括号