2011-05-23 97 views
1

在互聯網上有很多關於加密的答案,但我一直無法找到我正在尋找的東西:使用c#提供的用於加密字符串和文本文件的工具的簡單強加密。C#加密算法

我的主要問題是,我不知道如何將IV保存到文本文件的開頭或如何創建隨機IV。我有一個關於密碼流的例子,我已經看到了一個關於DES的例子,但是他們使用相同的IV和密鑰,那就是(通過知道什麼)並不是一件好事。

+0

有幾十個關於如何在本網站的C#中執行此操作的示例,你看過嗎?小心解釋加密字符串和文本文件的目的,如果你的應用程序能夠解密文件和字符串,你應該知道這樣做的安全風險。 – 2011-05-23 12:17:17

+0

一個不錯的課程是SecureString!試試看這裏:http://msdn.microsoft.com/it-it/library/system.security.securestring.aspx – danyolgiax 2011-05-23 12:21:26

+0

@danyolgiax:如果人們更喜歡英語:http://msdn.microsoft.com/en-us /library/system.security.securestring.aspx,它偶然包含高質量的社區評論鏈接http://msdn.microsoft.com/en-us/library/system.security.cryptography.protectedmemory.aspx以及 – sehe 2011-05-23 12:28:14

回答

2

你是對的,使用相同的IV是一個不好的做法,特別是如果密鑰或IV是硬編碼。我建議使用AesManaged類。它使用目前的標準AES算法。生成一個IV相當簡單:

var aes = new AesManaged(); //Set your KeySize if you will generate a key too. 
aes.GenerateIV(); 
var iv = aes.IV; 

這是獲取新的初始化向量的簡單方法。如果你的目標是加密一個文件,你可以存儲這個文件,但是你將如何處理這個文件?在你的應用程序中對它進行硬編碼通常不是一個很好的方法。如果您的應用程序是基於密碼的,那麼您可以從Rfc2898DeriveBytes生成密鑰以獲取基於密碼的字節數組。這樣,你的應用程序永遠不會知道加密密鑰是什麼。

以下是將IV寫入文件,然後寫入文件內容的示例。

using (AesManaged aes = new AesManaged()) 
{ 
    //Set the Key here. 
    aes.GenerateIV(); 
    using (var transform = aes.CreateEncryptor()) 
    { 
     using (var fileStream = new FileStream("C:\\in.txt", FileMode.Open)) 
     { 
      using (var saveTo = new FileStream("C:\\out.txt", FileMode.Create)) 
      { 
       using (var cryptoStream = new CryptoStream(saveTo, transform,CryptoStreamMode.Write)) 
       { 
        var iv = aes.IV; 
        cryptoStream.Write(iv, 0, iv.Length); 
        fileStream.CopyTo(cryptoStream); 
       } 
      } 
     } 
    } 
} 
+1

首先感謝您的回答:) 其次我有一個理解一件事的問題.. 我明白,硬編碼的關鍵是一個問題,但如果我的程序不知道加密密鑰比我怎麼能稍後解密文件?也就是說,如果程序加密了文件,然後在那之後崩潰了,我剩下一個加密文件,而且我對密鑰一無所知,所以信息就會丟失,我無法恢復被加密的信息。 – 2011-06-08 09:36:14