2017-05-19 20 views
0

我使用VS使用該功能的一些數據進行加密:AES256加密,根據輸入輸出字符...爲什麼?

public static byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes) 
{ 
    byte[] encryptedBytes = null; 

    // Set your salt here, change it to meet your flavor: 
    // The salt bytes must be at least 8 bytes. 
    byte[] saltBytes = new byte[] { 6, 99, 26, 12, 68, 22, 89, 12, 49, 55, 92, 82, 87, 86, 10, 75, 98, 122, 73 }; 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     using (RijndaelManaged AES = new RijndaelManaged()) 
     { 
      AES.KeySize = 256; 
      AES.BlockSize = 256; 

      var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000); 
      AES.Key = key.GetBytes(AES.KeySize/8); 
      AES.IV = key.GetBytes(AES.BlockSize/8); 

      AES.Mode = CipherMode.CBC; 

      using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write)) 
      { 
       cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length); 
       cs.Close(); 
      } 
      encryptedBytes = ms.ToArray(); 
     } 
    } 

    return encryptedBytes; 
} 

我的問題是,爲什麼當我把純文本輸出僅加密包含可與記事本等任何文字處理器觀看可讀字符,但是,如果要加密的數據來自包含特殊字符的文件,則輸出現在還包含無法從文本處理器查看的特殊字符......爲什麼?

加密的實施例 「你好」 「fMIiLZzIKME2gTAarpQqP7y8kOjQvDS12lSOOBtaCbI =」 加密的二進制數據的

示例: 「!B,~à4ovƒº1úlÔÊJô†O;>²Ñ)j|¹'åüLÖN-NU + 5」

+0

請從標籤中刪除「Cypher」。該標籤與[Cypher查詢語言](https://neo4j.com/developer/cypher-query-language/)相關。 –

回答

0

由於AES不會處理字符或字符串,只能使用字節。

如果您確實希望能夠在文本編輯器中查看結果,則必須對輸出的字節進行編碼。

其中一個這樣的編碼器將是base64之一。

這將輸出一個人類「可讀」的字符串。

+0

是的,我知道AES只能看到字節......但是如果輸入包含它,輸出包含不可讀的字符是非常罕見的......你不覺得嗎? – AlejandroAlis

+0

我會稱那個巧合,但後來有你的自我回答:) – Sidewinder94

0

我發現了probem ...我是個白癡......當輸入是純文本時,我調用了一個Convert.ToBase64String函數...我沒有看到這個。

對不起。

Thans

相關問題