После преобразования некоторых открытых текстовых паролей, хранящихся в SQL с использованием Hashbytes, похоже, не получается .Net для генерации правильного совпадающего хэша..Net SHA1CryptoServiceProvider не соответствует SQL Hashbytes
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 из того, что я понимаю.
Помощь?
Где что соль хранится? –
В базе данных. – carlowahlstedt
Пожалуйста, не используйте одиночную итерацию SHA1 для хэширования паролей. Используйте PBKDF2, bcrypt или scrypt. – CodesInChaos