2016-11-03 25 views
0

上午使用下面的AES算法代碼來加密給定的文本。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 ==

如果i升高的原始文本的字符,則該加密文本尺寸也在增加。

例如:

輸入:

原始文本長度增加

輸出:

RU3azV4sslgUWFSoCKxdKHN/qDCEcKX N/tCFa80Bcmu1O418T/CGRZc3mIzx0f2Q

結果字符串不應該根據輸入文本增加。這個怎麼做?

回答

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

+0

OP可能只是想要一個散列算法,並不知道正確的話來解釋他想要什麼。 –

+0

「*雖然它仍然會隨着輸入文本的增長而增長,出於同樣的原因,我給出了上述*」 - 散列算法**不會隨着輸入文本的增長而增長。它有固定長度的輸出。 –

+0

垃圾,你說得對。固定。 – nmg49