2010-12-21 58 views
3

我有一個字節[]字段,它是我需要加密的文件內容。沒有什麼特別或花哨的東西,僅僅足以確保下一個獲得它的人不會輕易地解碼它,而不需要付出一些努力。我會使用.Net Framework 4.0附帶的加密技術,但我絕對不需要讓文件變得更大。C#字節[]加密

我只想簡單地顛倒數組或添加幾個字節到最後...?

如果我可以避免讓陣列變得更大,那就太好了。

有什麼建議嗎?

謝謝!

+0

爲什麼你需要這種加密? – 2010-12-21 16:11:13

+0

ROT13? (最少15個字符) – 2010-12-21 16:12:57

+0

[.NET中的加密/解密字符串]可能的重複(http://stackoverflow.com/questions/202011/encrypt-decrypt-string-in-net) – Bobby 2010-12-21 16:14:08

回答

10

添加1-16字節是否受傷? AES默認使用以下方法填充:

private static void EncryptThenDecrypt() 
    { 
     byte[] message; // fill with your bytes 
     byte[] encMessage; // the encrypted bytes 
     byte[] decMessage; // the decrypted bytes - s/b same as message 
     byte[] key; 
     byte[] iv; 

     using (var rijndael = new RijndaelManaged()) 
     { 
      rijndael.GenerateKey(); 
      rijndael.GenerateIV(); 
      key = rijndael.Key; 
      iv = rijndael.IV; 
      encMessage = EncryptBytes(rijndael, message); 
     } 

     using (var rijndael = new RijndaelManaged()) 
     { 
      rijndael.Key = key; 
      rijndael.IV = iv; 
      decMessage = DecryptBytes(rijndael, encMessage); 
     } 
    } 

    private static byte[] EncryptBytes(
     SymmetricAlgorithm alg, 
     byte[] message) 
    { 
     if ((message == null) || (message.Length == 0)) 
     { 
      return message; 
     } 

     if (alg == null) 
     { 
      throw new ArgumentNullException("alg"); 
     } 

     using (var stream = new MemoryStream()) 
     using (var encryptor = alg.CreateEncryptor()) 
     using (var encrypt = new CryptoStream(stream, encryptor, CryptoStreamMode.Write)) 
     { 
      encrypt.Write(message, 0, message.Length); 
      encrypt.FlushFinalBlock(); 
      return stream.ToArray(); 
     } 
    } 

    private static byte[] DecryptBytes(
     SymmetricAlgorithm alg, 
     byte[] message) 
    { 
     if ((message == null) || (message.Length == 0)) 
     { 
      return message; 
     } 

     if (alg == null) 
     { 
      throw new ArgumentNullException("alg"); 
     } 

     using (var stream = new MemoryStream()) 
     using (var decryptor = alg.CreateDecryptor()) 
     using (var encrypt = new CryptoStream(stream, decryptor, CryptoStreamMode.Write)) 
     { 
      encrypt.Write(message, 0, message.Length); 
      encrypt.FlushFinalBlock(); 
      return stream.ToArray(); 
     } 
    }