2010-12-21 60 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(); 
     } 
    }