Здравствуйте, скажите пожалуйста как сделать 256 битный пароль под AES, на основе пользовательского пароля, длина которого может быть совсем разная.
То-есть если я сейчас буду шифровать текст, с KeyString = "helloworld"
, то вылезит ошибка, что пароль не подходит по длине, то-есть 256 битам. Что придумать с паролем?
public static string EncryptString(string message, string KeyString, string IVString)
{
byte[] Key = Encoding.UTF8.GetBytes(KeyString);
byte[] IV = Encoding.UTF8.GetBytes(IVString);
string encrypted = null;
RijndaelManaged rj = new RijndaelManaged();
rj.Key = Key;
rj.IV = IV;
rj.Mode = CipherMode.CBC;
try
{
MemoryStream ms = new MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, rj.CreateEncryptor(Key, IV), CryptoStreamMode.Write))
{
using (StreamWriter sw = new StreamWriter(cs))
{
sw.Write(message);
sw.Close();
}
cs.Close();
}
byte[] encoded = ms.ToArray();
encrypted = Convert.ToBase64String(encoded);
ms.Close();
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file error occurred: {0}", e.Message);
return null;
}
catch (Exception e)
{
Console.WriteLine("An error occurred: {0}", e.Message);
}
finally
{
rj.Clear();
}
return encrypted;
}
Если делать правильно, существуют Password Based Encryption, в которых предусмотрены наборы алгоритмов (блочные шифры, режим шифрования, хеш функция, количество итераций), которые на основе только пароля шифруют данные. Используется это, например в PKCS #12. Но, насколько я знаю, в C# нет классов для работы с этим.
Если делать проще, можно взять любую хеш-функцию, которая выдает 256-битный хеш (например SHA256) или хеш функцию, с хешом длиннее 256 бит, и обрезать конечный хеш. Для повышения безопасности (если пользователь вдруг решит использовать сильно простой пароль), можно взять хеш некоторое количество итераций (например несколько тысяч раз):
key = sha256(sha256(....sha256(pwd)...))
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый денья пытаюсь реализовать самостоятельно (в учебных целях), свой UserStore и Manager в Identity
Есть проблема с присвоением календарю значения nullПишет что null присвоить ему нельзя, пытаюсь конвертировать календарь или как нибудь привести...
Пытаюсь передать цифры в стринговом формате в фаст репорт в sql запросНо выдаёт ошибку:
Как реализовать отправку данных, например при регистрации, без библиотеки jQuery, на чистом JavaScript?