加密文本在AES算法中太大
本文关键字:算法 AES 加密文本 | 更新日期: 2023-09-27 18:15:59
我使用下面的AES算法代码对给定的文本进行加密。
string EncryptionKey = "abc";
string originalText = "Original text";
byte[] clearBytes = Encoding.ASCII.GetBytes(originalText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
string encryptedText = Convert.ToBase64String(ms.ToArray());
}
}
输出:XBqY9wBUpAa + ly7P2cdZBQ = =
如果我增加原始文本的字符,那么加密文本的大小也会增加。
例如:
输入:输出:原文本长度增加
RU3azV4sslgUWFSoCKxdKHN/qDCEcKXN/tCFa80Bcmu1O418T/CGRZc3mIzx0f2Q
结果字符串不应该根据输入文本增加。如何做到这一点?
如果我对你的问题理解正确的话,你的要求是不可能的。
我不是密码学专家,但我会尽我所能解释清楚:
设e(x)
为对给定x进行加密的函数
设d(x)
为解密给定x的函数
设x为某字符串
请考虑一下。如果e(x)取x并对其进行加密,那么必须存在一个d(x)来解密密文并将原始文本返回给我们。否则,我们的加密算法是无用的!如果e(x)的结果大小不能改变,那么d(x)就不可能存在。这是因为可以用文本编码的数据只有这么多(ascii中每字节127个可能的值)。因此,随着e(x)的输入消息的大小增长,一些密文(e(x)的结果)的大小也将以类似的速度增长。
如果你想减少输出文本的大小,你可以考虑使用压缩。我个人在这方面没有太多经验,但你可能想看看像GZipStream这样的东西。
另外,正如Luke建议的那样,您可能正在寻找一种散列算法,它将使您的文本具有固定大小。对于c#,可以看看hashgalgorithm