C # Байт [] Шифрование - PullRequest
       14

C # Байт [] Шифрование

3 голосов
/ 21 декабря 2010

У меня есть поле Byte [], которое представляет собой содержимое файла, которое мне нужно зашифровать. Ничего особенного или причудливого, просто достаточно, чтобы следующий человек, который его получит, не смог легко его расшифровать без особых усилий. Я бы использовал шифрование, поставляемое с .Net Framework 4.0, но мне определенно не нужно делать файл больше, чем он есть.

Я думал о том, чтобы просто перевернуть массив или добавить несколько байтов в конец ...?

Если бы я мог избежать увеличения массива, это было бы здорово.

Есть предложения?

Спасибо!

Ответы [ 2 ]

12 голосов
/ 21 декабря 2010

Больно ли добавление 1-16 байт? AES будет заполняться по умолчанию, используя следующий метод:

    private static void EncryptThenDecrypt()
    {
        byte[] message; // fill with your bytes
        byte[] encMessage; // the encrypted bytes
        byte[] decMessage; // the decrypted bytes - s/b same as message
        byte[] key;
        byte[] iv;

        using (var rijndael = new RijndaelManaged())
        {
            rijndael.GenerateKey();
            rijndael.GenerateIV();
            key = rijndael.Key;
            iv = rijndael.IV;
            encMessage = EncryptBytes(rijndael, message);
        }

        using (var rijndael = new RijndaelManaged())
        {
            rijndael.Key = key;
            rijndael.IV = iv;
            decMessage = DecryptBytes(rijndael, encMessage);
        }
    }

    private static byte[] EncryptBytes(
        SymmetricAlgorithm alg,
        byte[] message)
    {
        if ((message == null) || (message.Length == 0))
        {
            return message;
        }

        if (alg == null)
        {
            throw new ArgumentNullException("alg");
        }

        using (var stream = new MemoryStream())
        using (var encryptor = alg.CreateEncryptor())
        using (var encrypt = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))
        {
            encrypt.Write(message, 0, message.Length);
            encrypt.FlushFinalBlock();
            return stream.ToArray();
        }
    }

    private static byte[] DecryptBytes(
        SymmetricAlgorithm alg,
        byte[] message)
    {
        if ((message == null) || (message.Length == 0))
        {
            return message;
        }

        if (alg == null)
        {
            throw new ArgumentNullException("alg");
        }

        using (var stream = new MemoryStream())
        using (var decryptor = alg.CreateDecryptor())
        using (var encrypt = new CryptoStream(stream, decryptor, CryptoStreamMode.Write))
        {
            encrypt.Write(message, 0, message.Length);
            encrypt.FlushFinalBlock();
            return stream.ToArray();
        }
    }
2 голосов
/ 21 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...