使用以下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
结果字符串不应根据输入文本增加。怎么做?
答案 0 :(得分:3)
如果我正确理解你的问题,你所要求的是不可能的。
我不是加密专家,但我会尽力解释一下:
让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#,可以查看HashAlgorithm