在互聯網上有很多關於加密的答案,但我一直無法找到我正在尋找的東西:使用c#提供的用於加密字符串和文本文件的工具的簡單強加密。C#加密算法
我的主要問題是,我不知道如何將IV保存到文本文件的開頭或如何創建隨機IV。我有一個關於密碼流的例子,我已經看到了一個關於DES的例子,但是他們使用相同的IV和密鑰,那就是(通過知道什麼)並不是一件好事。
在互聯網上有很多關於加密的答案,但我一直無法找到我正在尋找的東西:使用c#提供的用於加密字符串和文本文件的工具的簡單強加密。C#加密算法
我的主要問題是,我不知道如何將IV保存到文本文件的開頭或如何創建隨機IV。我有一個關於密碼流的例子,我已經看到了一個關於DES的例子,但是他們使用相同的IV和密鑰,那就是(通過知道什麼)並不是一件好事。
你是對的,使用相同的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);
}
}
}
}
}
首先感謝您的回答:) 其次我有一個理解一件事的問題.. 我明白,硬編碼的關鍵是一個問題,但如果我的程序不知道加密密鑰比我怎麼能稍後解密文件?也就是說,如果程序加密了文件,然後在那之後崩潰了,我剩下一個加密文件,而且我對密鑰一無所知,所以信息就會丟失,我無法恢復被加密的信息。 – 2011-06-08 09:36:14
有幾十個關於如何在本網站的C#中執行此操作的示例,你看過嗎?小心解釋加密字符串和文本文件的目的,如果你的應用程序能夠解密文件和字符串,你應該知道這樣做的安全風險。 – 2011-05-23 12:17:17
一個不錯的課程是SecureString!試試看這裏:http://msdn.microsoft.com/it-it/library/system.security.securestring.aspx – danyolgiax 2011-05-23 12:21:26
@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