我想使用一种需要使用字节数组保存密码的方法,就像这个帖子中所述。
那么在SQL Server中应该使用哪种数据类型来保存字节数组?并且如何使用SqlCommand传递和检索字节数组?
我想使用一种需要使用字节数组保存密码的方法,就像这个帖子中所述。
那么在SQL Server中应该使用哪种数据类型来保存字节数组?并且如何使用SqlCommand传递和检索字节数组?
binary(length)
是合适的。如果它的长度将会变化,使用varbinary(maxlength)
。只需要像使用其他参数一样使用 byte[]
,将 SqlDbType.Binary
指定为参数类型即可。以下为 C# 示例:
// Generate your password hash some way
byte[] passwordHash = new byte[] { 0x0, 0x1, 0x2 ... };
...
command.Parameters.Add("@passwordHash", SqlDbType.Binary);
command.Parameters["@passwordHash"].Value = passwordHash;
或者如果您更喜欢 VB.NET
' Generate your password hash some way
Dim passwordHash As Byte() = New Byte() { &H0, &H1, &H2 ... }
...
command.Parameters.Add("@passwordHash", SqlDbType.Binary)
command.Parameters("@passwordHash").Value = passwordHash
VARBINARY(MAX)
。对于密码哈希,请使用BINARY(32)
(或者您的哈希值有多长就用多长)。 - p.s.w.gbinary(5)
,它分配了 5 个字节的存储空间,您会说这只适用于存储大文件吗? - Damien_The_Unbeliever我建议使用nvarchar(45)
,并将您的32个字节转换为Base64字符串。这是保存哈希的标准方法。
或者,您可以使用nvarchar(64)
并将其存储为十六进制字符串。