在使用 Hashbytes 转换存储在 SQL 中的一些明文密码后,似乎无法让 .Net 生成适当的匹配哈希。
用于转换密码的 SQL:
UPDATE Users
SET UserPassword = HASHBYTES('SHA1', UserPassword + CAST(Salt AS VARCHAR(36)))
现在用于生成哈希的 .Net 代码:
Dim oSHA1 As New System.Security.Cryptography.SHA1CryptoServiceProvider
Dim bValue() As Byte
Dim bHash() As Byte
bValue = System.Text.Encoding.UTF8.GetBytes(sPlainTextPass)
bHash = oSHA1.ComputeHash(bValue)
oSHA1.Clear()
Dim sEncryptPass As String = String.Empty
For i As Integer = 0 To bHash.Length - 1
sEncryptPass = sEncryptPass + bHash(i).ToString("x2").ToLower()
Next
一些补充说明:盐存储在数据库中。sPlainTextPass 包含纯文本的密码+盐。我尝试了几种不同的编码,包括 ASCII、UTF7 和 UTF8。数据库字段是一个 varchar,据我了解,它应该与 UTF8 匹配。
帮助?