Длина зашифрованной строки в c # - PullRequest
0 голосов
/ 03 сентября 2018

Я использую шифрование AES в своем приложении. Я использовал 3 типа шифрования AES-128, AES-192, AES-256 ключей. Когда я шифрую с другим размером ключа (128 или 192 или 256) с тем же текстом, длина зашифрованной строки одинакова для всех размеров ключа (128 и 192 и 256), тогда как зашифрованные символы отличаются только. Это правильно? Всегда ли длина зашифрованной строки одинакова для каждого размера ключа?

  static string GetEncryptedString_Aes(string plainText, byte[] Key, byte[] IV)
    {
        // Check arguments.
        if (plainText == null || plainText.Length <= 0)
            throw new ArgumentNullException("plainText");
        if (Key == null || Key.Length <= 0)
            throw new ArgumentNullException("Key");
        if (IV == null || IV.Length <= 0)
            throw new ArgumentNullException("IV");
        byte[] encrypted;

        // Create an AesCryptoServiceProvider object
        // with the specified key and IV.
        using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
        {
            aesAlg.Key = Key;
            aesAlg.IV = IV;

            // Create an encryptor to perform the stream transform.
            ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

            // Create the streams used for encryption.
            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        //Write all data to the stream.
                        swEncrypt.Write(plainText);
                    }

                    encrypted = msEncrypt.ToArray();
                }
            }
        }


        // Return the encrypted bytes from the memory stream.
        return Convert.ToBase64String(encrypted);

    }

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Оформить заказ по ссылке ниже. Размер вашего ключа не меняет вашу длину вывода. (Блочное шифрование)

Размер данных после шифрования AES / CBC и AES / ECB

0 голосов
/ 03 сентября 2018

Используете ли вы SQL Server 2005 или выше? Если это так, вы можете просто использовать VARCHAR (MAX) или NVARCHAR (MAX) для типа столбца.

Если вы хотите быть немного более точным ...

Максимальный размер блока для RijndaelManaged составляет 256 бит (32 байта).

Ваш максимальный размер ввода составляет 20 символов, поэтому, даже если мы предположим, что наихудший сценарий составляет 4 байта на символ, он будет составлять только 80 байтов, которые затем будут дополнены максимум 96 байтами для процесс шифрования.

Если вы используете кодировку Base64 на зашифрованном выходе, которая создаст 128 символов из 96 зашифрованных байтов. Если вы используете шестнадцатеричное кодирование, то это создаст 192 символа из 96 зашифрованных байтов (плюс, возможно, пару дополнительных символов, если вы префикс шестнадцатеричной строки начинаются с «0x»). В любом случае ширина столбца в 200 символов должна дать вам более чем достаточный запас.

(NB: Это просто вычисления, которые мне не нравятся. Я не проверял, что они действительно правильные!)

...