2017-05-09 1 views

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.