加密文本在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

结果字符串不应该根据输入文本增加。如何做到这一点?

加密文本在AES算法中太大

如果我对你的问题理解正确的话,你的要求是不可能的。

我不是密码学专家,但我会尽我所能解释清楚:

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