Вставить текстовое поле.текст «123456» в качестве пароля в базе данных Mysql

#c# #mysql #password-encryption

#c# #mysql #пароль-шифрование

Вопрос:

Я хочу создать пользователя и вставить в существующую таблицу с запросом mysql.

У меня есть это в C#:

 using (OdbcCommand cmd6 = new OdbcCommand("INSERT INTO users (id,Name,login,pass) VALUES ('"   textboxID.Text   "','"   textboxNAME.Text   textboxLOGIN.Text   "','"   textboxPASS.Text   "' )", conn6))
  

Я хочу получить пропуск от textboxPASS.Текст и вставки зашифрованы, потому что теперь он вставляется как текст.

Примечание.- Если я введу «pass123456» в мой textboxPASS…It возьмите его и вставьте в виде текста: «pass123456». И когда я вижу таблицу, у других уже существующих пользователей есть зашифрованные пароли. (около 40 цифровых символов). Но мой новый пользователь имеет это поле в виде текста «pass123456».

Надеюсь, вы сможете мне помочь. Спасибо!

Комментарии:

1. Бобби Таблс немного плачет. Пожалуйста, пожалуйста, пожалуйста, используйте параметры. И, пожалуйста, не храните пароли, даже зашифрованные. Вы храните только криптографические хэши паролей.

2. Этот код может быть уязвим для внедрения sql. Не используйте это так, если вы делаете это в каком-то живом проекте

3. @AmarnathRShenoy здесь нет «может быть». Это абсолютно тривиально уязвимо.

4. @MarcGravell пытался быть милым: D

5. Не зная, с помощью какой схемы шифрования генерируются ваши текущие пароли, как мы можем показать вам, как зашифровать ваши текстовые пароли?

Ответ №1:

SQL делает то, что ему сказано. Если вы хотите сначала выполнить какую-либо криптографическую операцию с данными, вы должны это сделать:

 // note using ? since ODBC has poor support for named parameters, IIRC
using (OdbcCommand cmd = new OdbcCommand(
    "INSERT INTO users (id,Name,login,pass) VALUES (?,?,?,?)", conn))
{
    // this is most likely a hash op, and probably involves salt of some kind
    var cryptoPass = SomeCryptoOperation(..., textboxPASS.Text);

    cmd.Parameters.AddWithValue("id", textboxID.Text);
    cmd.Parameters.AddWithValue("name", textboxNAME.Text);
    cmd.Parameters.AddWithValue("login", textboxLOGIN.Text);
    cmd.Parameters.AddWithValue("pass", cryptoPass);
    cmd.ExecuteNonQuery();
}
  

Комментарии:

1. Большое СПАСИБО, Марк Гравелл, позвольте мне попробовать, и я скажу вам, хорошо ли это работает для меня.

Ответ №2:

Просто вызовите функцию шифрования, например.

 using (SqlCommand cmd6 = new SqlCommand("INSERT INTO Users VALUES(@Username, @Password)"))
    {
        cmd6.CommandType = CommandType.Text;
        cmd6.Parameters.AddWithValue("@Username", txtUsername.Text.Trim());
        cmd6.Parameters.AddWithValue("@Password", Encrypt(txtPassword.Text.Trim()));
  

для более продвинутого шифрования проверьте функции AES