J'ai un tas de hachages de mots de passe qui ont été fait en utilisant PWDENCRYPT dans SQL Server. Je voudrais maintenant valider ces hachages dans mon application C# (qui sera ensuite mis à jour si le mot de passe correspond) sans envoyer le mot de passe à SQL Server. Comment cela peut-il être fait?Comment puis-je vérifier manuellement les mots de passe hachés avec SQL Server PWDENCRYPT en C#
0
A
Répondre
0
suivant les conseils de cette réponse (https://stackoverflow.com/a/18154134/545430) vous pouvez écrire quelque chose comme ceci pour vérifier les mots de passe cryptés avec PWDENCRYPT sur SQL Server 2008.
SqlConnection conn = new SqlConnection(<your connection string>);
conn.Open();
SqlCommand cmd = new SqlCommand(<select hash field>, conn);
SqlDataReader reader = cmd.ExecuteReader();
byte[] pwHash = new byte[20];
byte[] dbHash = new byte[26];
reader.Read();
reader.GetBytes(0, 0, dbHash, 0, 26);
int header = BitConverter.ToChar(dbHash, 0);
if (header == 1) //SHA1 encryption in Server 2008
{
byte[] salt = new byte[4];
Buffer.BlockCopy(dbHash, 2, salt, 0, 4);
Buffer.BlockCopy(dbHash, 6, pwHash, 0, 20);
HashAlgorithm cryptoThing = SHA1.Create();
byte[] test = cryptoThing.ComputeHash(Encoding.Unicode.GetBytes("mypw" + Encoding.Unicode.GetString(salt)));
if (pwHash.SequenceEqual(test))
{
//Password is good
}
}
Les mots de passe fait en 2012 ou utiliser plus tard, le SHA2-256 et ont une valeur d'en-tête de 2. Ce code pourrait être facilement mis à jour pour gérer cela aussi bien.