2010-07-17 85 views
0

在我的情況下,我有許多將存儲在服務器上的文件。這些文件中的每一個都是由我編寫的C#應用​​程序創建的。如何在保存大量獨立文件時正確調用C#中的RijndaelAlg.CreateEncryptor

背景: 對於這種應用,加密心不是重要的所需的時間量,該文件可能會很小,我們有大量的CPU週期以備用(客戶端是加密或唯一的計算機解密數據)。

每個文件是不相關的,我需要的內容能夠防止由誰得到硬盤的一個保留的系統管理員或任何人窺探(假設一個壞傢伙)

我的理解是RijndaelAlg是一個堅實的算法這種操作?假設這是信息是正確的如何正確使用RijndaelAlg.CreateEncryptor函數?

我想要的可用性是爲我的用戶輸入密碼,假設密碼是一個很好的密碼。

我的問題是

  1. 如何最好地用戶inputed字符串(C#「字符串)轉換成一個byte []轉換?我假設我應該散列來解決在其他角色上都有0的問題?做這種轉換的最佳方式是什麼?

  2. 我該如何使用IV?這是我的理解,這是一個應該填充的值(即使MSDN說可以通過'null')。我爲這個值使用了什麼?記住我的情況我有一堆需要獨立解密的獨立文件。

    如果IV是衆所周知的,這是一個問題嗎? (我可以使用散列的文件名,因爲它是一個唯一的值)

  3. 有沒有比RijndaelAlg更好的算法來加密許多獨立的文件使用相同的密碼?

回答

3

Q1。我通常使用UTF8類的GetBytes()方法將字符串轉換爲字節數組。

Encoding.UTF8.GetBytes(myString) 

Q2。每次創建RijndaelManaged類的實例時,都會隨機爲您生成一個IV(可通過IV屬性訪問)。您可以通過調用GenerateIV()方法來再次對此進行隨機化。

由於您需要使用此IV來解密數據,因此您最好將此IV存儲在某個位置,而不是每個文件都有一個唯一的IV。如果您使用靜態IV對所有文件進行加密,則在每次解密文件時,確保在創建RijndaelManaged類的新實例時設置IV。

Q3。 RijndaelManaged/AES是最安全的算法,我不會使用任何els。

+2

不要嘗試對字符串進行編碼,請使用PasswordDeriveBytes或Rfc2898DeriveBytes。 – 2010-07-18 01:16:15

+0

嗯,好點,因爲我忘記了它是用來加密密碼的。 – 2010-07-18 01:31:00

+0

'PasswordDeriveBytes'現在已經過時。使用['Rfc2898DeriveBytes.GetBytes'](http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.getbytes.aspx) – Elmo 2014-12-15 19:13:05

相關問題