我在应用程序中使用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);
}
答案 0 :(得分:1)
查看下面的链接。密钥的大小不会改变您的输出长度。 (块密码加密)
答案 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个字符都应该为您提供足够的余量。
(注意:这些只是我头上的计算。我尚未验证它们是否正确!)