ASP.NET Hash пароль с использованием MD5 - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть следующий код, который хэширует пароль, введенный пользователем, и впоследствии сохраняет его в базе данных SQL Server:

   Byte[] originalPassword;
   Byte[] hashedPassword;

   MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
   UTF8Encoding encoder = new UTF8Encoding();

   originalPassword = encoder.GetBytes(passwordBox.Text);
   hashedPassword = md5Hasher.ComputeHash(originalPassword);
   command.Parameters.Add(new SqlParameter("Password", hashedPassword));
   command.ExecuteNonQuery();

Моя проблема в том, что у меня есть несколько паролей в виде открытого текста, которые уже хранятся в базе данных. Как именно я могу изменить их в этот новый хэшированный формат, поскольку они отображаются как «0xA99ED ....»?

Ответы [ 4 ]

2 голосов
/ 16 ноября 2011
try this out first create a Windows form with 2 buttons and 2 text boxes
1st button label Encrypt
2nd button label Validate
**--- Hashing using the MD5 class ---**

use the following code below
/// <summary>
/// take any string and encrypt it using MD5 then
/// return the encrypted data 
/// </summary>
/// <param name="data">input text you will enterd to encrypt it</param>
/// <returns>return the encrypted text as hexadecimal string</returns>
private string GetMD5HashData(string data)
{
    //create new instance of md5
    MD5 md5 = MD5.Create();

    //convert the input text to array of bytes
    byte[] hashData = md5.ComputeHash(Encoding.Default.GetBytes(data));

    //create new instance of StringBuilder to save hashed data
    StringBuilder returnValue = new StringBuilder();

    //loop for each byte and add it to StringBuilder
    for (int i = 0; i < hashData.Length; i++)
    {
        returnValue.Append(hashData[i].ToString());
    }

    // return hexadecimal string
    return returnValue.ToString();

}

/// <summary>
/// encrypt input text using MD5 and compare it with
/// the stored encrypted text
/// </summary>
/// <param name="inputData">input text you will enterd to encrypt it</param>
/// <param name="storedHashData">the encrypted text
///         stored on file or database ... etc</param>
/// <returns>true or false depending on input validation</returns>
private bool ValidateMD5HashData(string inputData, string storedHashData)
{
    //hash input text and save it string variable
    string getHashInputData = GetMD5HashData(inputData);

    if (string.Compare(getHashInputData, storedHashData) == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
2 голосов
/ 09 ноября 2011

Вывод любой хеш-функции представляет собой набор байтов, а не набор текста. Поэтому, когда вы вводите текст в качестве теста, вы, вероятно, вводите преобразование текста этого байтового массива. Простое преобразование его в SQL в двоичный файл (16) не является правильным, вам нужно сделать правильное преобразование, чего вы не можете сделать в SQL. Это также объясняет, почему изменение типа данных столбца также не работает.

Когда хэши выражаются в виде строк, это обычно происходит через шестнадцатеричные значения каждого байта или через кодировщик набора символов. Чтобы переключаться между ними, вам нужно выяснить, какой из них используется, и выполнить преобразование в коде, а не путем переключения типов данных в SQL

1 голос
/ 01 сентября 2016

Вот версия VB.NET, использующая LINQ (для тех, кто все еще использует VB.NET):

Public Function GenerateMD5(ByVal plainText As String) As String
        Return String.Join("", System.Security.Cryptography.MD5.Create().ComputeHash(System.Text.Encoding.ASCII.GetBytes(plainText)).Select(Function(x) x.ToString("x2")))
End Function
1 голос
/ 12 июля 2016

Этот метод отлично работает, возвращает строку из хеша MD5, используя LINQ.Это работало для MailChimp API 3.0, тогда как предыдущий код, который возвращал байтовый массив, не работал.

  public static string GetMd5HashData(string yourString )
  {
     return string.Join("", MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(yourString)).Select(s => s.ToString("x2")));
  }

Найдено здесь: http://rion.io/2013/02/23/generating-an-md5-hash-from-a-string-using-linq/

...