Witajcie,
Poszukiwałem prostej metody do szyfrowania hasła, które będzie wpadało do bazy danych. Przy rejestracji użytkownik tworzy sobie hasło, następnie ono jest szyfrowane i wrzucane do bazy danych. Przy logowaniu następuje deszyfrowanie.
public static class StringUtil
{
private static byte[] key = new byte[8] {1, 2, 3, 4, 5, 6, 7, 8};
private static byte[] iv = new byte[8] {1, 2, 3, 4, 5, 6, 7, 8};
public static string Crypt(this string text)
{
SymmetricAlgorithm algorithm = DES.Create();
ICryptoTransform transform = algorithm.CreateEncryptor(key, iv);
byte[] inputbuffer = Encoding.Unicode.GetBytes(text);
byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
return Convert.ToBase64String(outputBuffer);
}
public static string Decrypt(this string text)
{
SymmetricAlgorithm algorithm = DES.Create();
ICryptoTransform transform = algorithm.CreateDecryptor(key, iv);
byte[] inputbuffer = Convert.FromBase64String(text);
byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
return Encoding.Unicode.GetString(outputBuffer);
}
}
Przy rejestracji przy tworzeniu nowego obiektu po prostu wywołuję metodę:
Users_login newUser = new Users_login();
newUser.Login = Login;
newUser.Password = Crypt(Password);
db.Users_logins.InsertOnSubmit(newUser);
I wszystko działa.
Niestety przy logowaniu czyli wywołaniu metody Decrypt:
var query = (from x in db.Users_logins
where x.Login == login && Decrypt(x.Password) == password
select x);
if (query.Count()!=1)
{
MessageBox.Show("Your password or login is not valid, please try again");
}
else
{
MessageBox.Show("Success! You're logged!");
}
Otrzymuję błąd: "System.NotSupportedException: 'Brak obsługiwanego tłumaczenia na język SQL dla metody „System.String Decrypt(System.String)”.'
" W jaki sposób mogę rozwiązać tą sytuację?