шифрование md5 в asp.net

#c# #asp.net #encryption

#c# #asp.net #шифрование

Вопрос:

Я использую шифрование md5 для данных о зарплате в моей компании.
Эта страница должна быть просмотрена только при вводе пользователем правильного пароля. я сохраняю этот зашифрованный пароль в базе данных.
при получении iam сравнивается зашифрованный пароль.
Могу ли я каким-либо образом использовать этот пароль в качестве ключа?

я хочу добиться следующего

  1. Если пользователь сохраняет данные о зарплате, этот хэш пароля будет шифровать данные
  2. Если пользователь просматривает информацию о зарплате, этот пароль следует использовать для расшифровки данных

или я должен использовать какой-то алгоритм, например, Triple Des?

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

1. Я вижу огромный сбой в системе безопасности в том, что вы никогда не сможете изменить пароль. Если вы это сделаете, зашифрованные данные о зарплате не будут расшифрованы, если вы не расшифруете с помощью old, а затем повторно зашифруете. И если пароль потерян, то данные о зарплате пропадут навсегда.

2. хорошо .. это означает, что я должен использовать алгоритм diff для шифрования данных о моей зарплате

3. md5 — это механизм дайджеста, это не схема шифрования. Вы хотите получить секретный ключ из пароля

4. да, с помощью этого ключа я зашифрую оставшиеся данные … но опять же, если я использую этот ключ в качестве шифрования.. я должен сохранить этот ключ в базе данных… еще как я собираюсь извлекать..

Ответ №1:

Да, вам нужно использовать (обратимый) алгоритм шифрования, а не (односторонний) алгоритм хеширования.

Ответ №2:

MD5 — это одностороннее шифрование, используйте Triple DES для шифрования данных и MD5 для шифрования пароля. Вот что я использую:

 public static string Crypt(this string data, string password, bool encrypt)
{
    var u8Salt = new byte[] { 0x26, 0x19, 0x81, 0x4E, 0xA0, 0x6D, 0x95, 0x34, 0x26, 0x75, 0x64, 0x05, 0xF6 };
    var iPass = new Rfc2898DeriveBytes(password, u8Salt);
    var iAlg = Aes.Create();
    iAlg.Key = iPass.GetBytes(32);
    iAlg.IV = iPass.GetBytes(16);
    var iTrans = (encrypt) ? iAlg.CreateEncryptor() : iAlg.CreateDecryptor();
    var iMem = new MemoryStream();
    var iCrypt = new CryptoStream(iMem, iTrans, CryptoStreamMode.Write);
    var u8Data = encrypt ? Encoding.Unicode.GetBytes(data) : Convert.FromBase64String(data);
    try
    {
        iCrypt.Write(u8Data, 0, u8Data.Length);
        iCrypt.Close();
        return encrypt ? Convert.ToBase64String(iMem.ToArray()) : Encoding.Unicode.GetString(iMem.ToArray());
    }
    catch
    {
        return null;
    }
}
  

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

1. Или используйте SHA2 (для паролей). codeproject.com/KB/security/GoodbyeMD5.aspx

2. Он использует asp.net это часть фреймворка. Также легко найти реализации Javascript, например movable-type.co.uk/scripts/sha256.html

3. Кибер нарисовал, что ты делаешь в этом коде.. как вы назначаете ключ ipass.getbytes (32), какое значение хранится в этом, да, я использую c#

4. Это метод расширения, который я использую для простого шифрования или дешифрования строковых данных, я передаю пароль в виде строки, но он зашифрован SHA1.

5. Пожалуйста, прекратите использовать слово «шифрование», когда вы имеете в виду «хэш».