Алгоритмы шифрования C # - PullRequest
1 голос
/ 23 мая 2011

В Интернете есть много ответов относительно шифрования, но мне не удалось найти именно то, что я ищу: простое надежное шифрование с использованием инструментов, которые c # предоставляет для шифрования строк и текстовых файлов.

Моя главная проблема в том, что я не знаю, как сохранить IV в начале текстового файла или как создать случайный IV.У меня есть пример на криптопотоке, и я видел пример на DES, но они используют тот же IV и ключ, и это (из-за того, что I знает) не очень хорошая вещь.

1 Ответ

2 голосов
/ 23 мая 2011

Вы правы, использование одного и того же IV - плохая практика, особенно если ключ или IV жестко закодированы. Я бы рекомендовал использовать класс AesManaged. Он использует алгоритм AES, текущий стандарт. Генерация IV довольно проста:

var aes = new AesManaged(); //Set your KeySize if you will generate a key too.
aes.GenerateIV();
var iv = aes.IV;

Это простой способ получить новый вектор инициализации. Если ваша цель - зашифровать файл, вы можете сохранить файл, но что вы будете делать с ключом? Жесткое кодирование в вашем приложении, как правило, не очень хороший способ сделать это. Если ваше приложение будет основано на пароле, вы можете сгенерировать ключ из Rfc2898DeriveBytes , чтобы получить байтовый массив на основе пароля. Таким образом, ваше приложение никогда не знает, что такое ключ шифрования.

Вот пример для записи IV в файл, затем содержимое файла.

using (AesManaged aes = new AesManaged())
{
    //Set the Key here.
    aes.GenerateIV();
    using (var transform = aes.CreateEncryptor())
    {
        using (var fileStream = new FileStream("C:\\in.txt", FileMode.Open))
        {
            using (var saveTo = new FileStream("C:\\out.txt", FileMode.Create))
            {
                using (var cryptoStream = new CryptoStream(saveTo, transform,CryptoStreamMode.Write))
                {
                    var iv = aes.IV;
                    cryptoStream.Write(iv, 0, iv.Length);
                    fileStream.CopyTo(cryptoStream);
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...