#c# #asp.net #encryption
#c# #asp.net #шифрование
Вопрос:
Я использую шифрование md5 для данных о зарплате в моей компании.
Эта страница должна быть просмотрена только при вводе пользователем правильного пароля. я сохраняю этот зашифрованный пароль в базе данных.
при получении iam сравнивается зашифрованный пароль.
Могу ли я каким-либо образом использовать этот пароль в качестве ключа?
я хочу добиться следующего
- Если пользователь сохраняет данные о зарплате, этот хэш пароля будет шифровать данные
- Если пользователь просматривает информацию о зарплате, этот пароль следует использовать для расшифровки данных
или я должен использовать какой-то алгоритм, например, 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. Пожалуйста, прекратите использовать слово «шифрование», когда вы имеете в виду «хэш».