2013-03-20 10 views
11

Am sucht einen Ansatz zu verwenden, bei Speichern von Kennwörtern, die als Byte-Array erfordert die Verwendung in diesem postSave Byte-Array in SQL Server

Also, welchen Datentyp soll ich in SQL Server verwende Byte-Array speichern? und wie kann ich das Bytearray mit SqlCommand übergeben und abrufen?

Antwort

19

Wenn es immer geht die gleiche Länge sein, dann würde binary(length) geeignet sein. Wenn es in der Länge variieren wird, verwenden Sie varbinary(maxlength).

binary and varbinary.

Und, wie @ ps.s.g. sagt, übergeben Sie es aus Code, indem Sie es in einen geeigneten Parameter platzieren.

+0

+1 Ja. Genau. –

+1

für mich brauchte ich 'varbinary (max)' –

3

Verwenden Sie einfach einen byte[] auf die gleiche Weise wie bei jedem anderen Parameter, geben Sie SqlDbType.Binary als Parametertyp an. Hier ist ein Beispiel in 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; 

Oder wenn Sie es vorziehen, 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 
+0

ist es in Ordnung, Binär-SQL-Datentyp zu verwenden? wie ich einige Leute googled, die ihre Verwendung für große binäre Dateien wie Bilder erklären, stimmen Sie damit überein? – user2155873

+0

@ user2155873 Verwenden Sie 'VARBINARY (MAX)' für Dateien, die etwas groß oder unterschiedlich lang sind. Für Passwort-Hashes verwenden Sie 'BINARY (32)' (oder wie lang Ihr Hash ist). –

+1

@ user2155873 - vorausgesetzt, dass Sie eine 'binary (5)' deklarieren können, die Speicher für 5 Bytes zuweist, würden Sie sagen, dass das nur zum Speichern einer großen Datei geeignet war? –

0

Weiß nicht, wie alt das ist, aber ich würde nvarchar (45) und Base64 Ihre 32 Bytes in einer Zeichenfolge empfehlen. Dies ist die Standardmethode zum Speichern eines Hashs. Alternativ können Sie nvarchar (64) als Hexadezimalstring speichern.