C#中的加密字符串长度

时间:2018-09-03 07:37:16

标签: c# encryption-symmetric

我在应用程序中使用AES加密。我使用了3种类型的加密AES-128,AES-192,AES-256密钥大小。 当我用相同的文本使用不同的keysize(128或192或256)进行加密时,所有keysize(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);

    }

3 个答案:

答案 0 :(得分:1)

查看下面的链接。密钥的大小不会改变您的输出长度。 (块密码加密)

Size of data after AES/CBC and AES/ECB encryption

答案 1 :(得分:0)

根据填充,键大小等和算法的使用,您将获得奇数大小

我总是喜欢验证它,因此我只fidle讨论我要使用的类型和期望输入的数据大小,就像这样,我知道数据的大小数据库。

尝试使用链接中的数据,看看您需要什么。

答案 2 :(得分:-1)

您是否正在使用SQL Server 2005或更高版本?如果是这样,您可以仅将VARCHAR(MAX)或NVARCHAR(MAX)用作列类型。

如果您想更加精确...

RijndaelManaged的最大块大小为256位(32字节)。

您的最大输入大小为20个字符,因此,即使我们假设最坏的情况是每个字符4个字节,也只能达到80个字节,然后最多可以填充96个字节。加密过程。

如果在加密输出上使用Base64编码,则将从96个加密字节中创建128个字符。如果您使用十六进制编码,则将从96个加密字节中创建192个字符(如果您将十六进制字符串加“ 0x”作为前缀,则可能会加上几个额外的字符)。无论哪种情况,列宽200个字符都应该为您提供足够的余量。

(注意:这些只是我头上的计算。我尚未验证它们是否正确!)