【发布时间】:2013-03-09 05:21:08
【问题描述】:
我希望使用一种方法来保存需要使用字节数组的密码,如post
那么我应该在 sql server 中使用哪种数据类型来保存字节数组?以及如何使用 SqlCommand 传递和检索字节数组?
【问题讨论】:
标签: sql-server bytearray sqlcommand
我希望使用一种方法来保存需要使用字节数组的密码,如post
那么我应该在 sql server 中使用哪种数据类型来保存字节数组?以及如何使用 SqlCommand 传递和检索字节数组?
【问题讨论】:
标签: sql-server bytearray sqlcommand
如果它总是相同的长度,那么binary(length) 将是合适的。如果长度不同,请使用varbinary(maxlength)。
而且,正如@p.s.w.g 所说,您可以通过将其放入合适的参数中来从代码中传递它。
【讨论】:
只需像使用任何其他参数一样使用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)(或者无论您的哈希有多长)。
binary(5),它分配了5个字节的存储空间,你会说那只适合存储一个大文件吗?
我建议您使用nvarchar(45) 和 Base64 将您的 32 个字节转换为字符串。这是保存哈希的标准方法。
您也可以使用nvarchar(64) 并将其存储为十六进制字符串。
【讨论】: