T-SQL zu Bekommen bytes aus VARCHAR ohne Konvertierung in UNICODE

Speichern wir einen Passwort-hash in der Datenbank. Im Grunde bekommen wir den MD5-hash (array von bytes) und dann die Codierung.Unicode.GetChars auf das byte-array und speichern das resultierende Zeichenfolge in der Datenbank. Wenn dann jemand anmeldet wir hash Ihr Passwort auf die gleiche Weise und ein Vergleich der beiden strings.

Dies funktioniert gut, außer, dass ich nicht extrahieren kann ein Passwort-hash in T-SQL und fügen Sie ihn in eine andere Zeile. Die einzige Möglichkeit, die ich bekommen kann, dass, zu arbeiten, wenn ich eigentlich den Passwort-hash direkt aus ein wählen Sie eine weitere Zeile mit einem gültigen hash.

Habe ich versucht, konvertieren Sie die Zeichenfolge in hex und lassen Sie SQL konvertieren, aber das funktioniert auch nicht. Ich vermute, es ist, weil die bytes, die wir als UNICODE Kodieren sind wahrscheinlich nicht machen, bis eine gültige UNICODE-string.

So zum Beispiel (SQL-Server: Konvertiert einen string in einen hex-string und zurück):

Wenn Sie den folgenden Befehl ausführen, das Wort 'Hilfe' bekommt umgewandelt var Binär-und dann zurück in einen string und hey presto! Beenden Sie mit 'Helfen' wieder.

SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 'Help'))

Problem ist, dass wenn ich das auf meine Kennwort-hash-Spalte, der resultierende Wert ist nicht das gleiche wie in der Spalte gespeichert. Wenn ich fügen Sie die Zeichenfolge, die den Hashwert in SQL Management studio zwischen zwei '- Zeichen, es springt in die Vergangenheit " und setzt in einigen anderen Zeichen. Wieder, probalby versuchen, interperet eine unvollständige UNICODE-Sequenz zu sehen, da es keine richtige UNICODE-string.

Also, was ich Suche, ist ein Weg, um einfach die bytes in der VARCHAR(64), enthält den Passwort-hash und schreiben Sie es auf ein codieren von text-format, so etwas wie:

0x0F037584C99E7FD4F4F8C59550F8F507

So, dass ich dann etwas tun, wie

UPDATE   [User]
SET      PasswordHash = CONVERT(NVARCHAR(64), 0x0F037584C99E7FD4F4F8C59550F8F507)
WHERE    UserID = 123

Irgendwelche Ideen?

Schreibe einen Kommentar