Я хотел бы выполнить функцию изменения пароля Ниже показан код и скриншоты, что я сделал до сих пор:Шифрование и дешифрование в функции смены пароля?
private void Password_Change()
{
int rowsAffected = 0;
string query = "UPDATE staff_user SET staff_password = @newpassword WHERE staff_password = @staff_password";
string constr = ConfigurationManager.ConnectionStrings["dbyouthworkConnectionString"].ConnectionString;
ConfirmPassword.Text = Encrypt(ConfirmPassword.Text.Trim());
CurrentPassword.Text = Decrypt(CurrentPassword.Text.Trim());
using (MySqlConnection con = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand(query))
{
con.Open();
using (MySqlDataAdapter sda = new MySqlDataAdapter())
{
cmd.Parameters.AddWithValue("@staff_password",CurrentPassword.Text);
cmd.Parameters.AddWithValue("@newpassword", (ConfirmPassword.Text));
cmd.Connection = con;
rowsAffected = cmd.ExecuteNonQuery();
con.Close();
}
if (rowsAffected > 0)
{
Label1.ForeColor = System.Drawing.Color.Green;
Label1.Text = "Password has been changed successfully.";
}
else
{
Label1.ForeColor = System.Drawing.Color.Red;
Label1.Text = "Password does not match with our database records.";
}
if (CurrentPassword.Text == New_Password.Text)
{
Label1.ForeColor = System.Drawing.Color.Red;
Label1.Text = "Old Password and New Password cannot be the same !";
}
if (CurrentPassword.Text == ConfirmPassword.Text)
{
Label1.ForeColor = System.Drawing.Color.Red;
Label1.Text = "Old Password and New Password cannot be the same !";
}
}
}
}
private string Encrypt(string clearText)
{
string EncryptionKey = "MAKV2SPBNI99212";
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
}
private string Decrypt(string cipherText)
{
string EncryptionKey = "MAKV2SPBNI99212";
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
}
cipherText = Encoding.Unicode.GetString(ms.ToArray());
}
}
return cipherText;
}[![enter image description here][1]][1]
Однако при запуске проекта Это ошибка, я получаю:
Я не могу видеть, где я ушел, так как я использовал ту же функцию расшифровки, когда пользователь входит в систему и функция шифрования, когда пользователь создает учетную запись.
Поскольку пароли никогда не хранятся (зашифрованный или обычный текст), ваш код выглядит странно. Пожалуйста, убедитесь, что фактический код хеширует пароли и не шифрует их, а код в сообщении - это просто образец некоторого случайного поля, зашифрованного/дешифрованного. –
@AlexeiLevenkov Что заставляет вас думать, что «пароли никогда не хранятся (зашифрованные или простые тексты)», уверены, что они не должны быть, но на самом деле они все так часто бывают. – zaph
Вы никогда не должны шифровать пароли своего пользователя. Вместо этого вам нужно использовать хеширование, а некоторые сильные - PBKDF2, bcrypt, scrypt и Argon2. Поскольку хеш-функции являются однонаправленной, вы не сможете «расшифровать» хеши. Чтобы аутентифицировать пользователя, вы можете снова запустить пароль через хеш-функцию, чтобы сравнить с хешем, который хранится в базе данных. Подробнее: [Как безопасно использовать хэш-пароли?] (Http://security.stackexchange.com/q/211/45523) –