聽起來像你需要讀入Rfc2898DeriveBytes類。
Rfc2898DeriveBytes.GetBytes();
它有一個方法(上文),可以允許,簡單地通過將一個int值來調整該被送入上的對稱加密算法的。重點和.IV屬性字節數組的大小。 MS官方的70-536版書籍建議通過將KeySize屬性/ 8分開來進行此操作。例如,TripleDes或AESManaged。無論你使用什麼,算法本身都會有一些需要先滿足的預先需求。即滿足關鍵尺寸條件。 RunTime會自動填充屬性和字段等,爲您提供最好,最強大的值。但是IV和Key需要來自你。這如何可以做到以下幾點:
RijndaelManaged myAlg = new RiRijndaelManaged();
byte[] salt = Encoding.ASCII.GetBytes("Some salt value");
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes("some password", salt);
myAlg.Key = key.GetBytes(myAlg.KeySize/8);
myAlg.IV = key.GetBytes(myAlg.BlockSize/8);
// myAld should now fully set-up.
上面可以看到我的意思做親語法,因爲它應該非常 做這一切爲你,沒有你竟然真的有蝙蝠的眼睛 - 滿足它的預先要求。
Microsoft 70-536書指出,.Key屬性期望您按字節提供 的字節數組,而不是位。 RFC類以字節形式工作,其中算法KeySize屬性以位爲單位工作。 1個字節= 8位。你能看到這是怎麼回事嗎? 這應該給你一個想法,爲什麼上面的示例peice代碼完成了它的方式!我研究過它,這對我來說非常合適!
上述答案應該允許您使用提供的密碼和靜態鹽值創建算法對象,該值可以是兩端的硬代碼。您只需要擔心如何確保存儲在.Key和.IV中的字節數組安全地傳輸到收件人,以便可以成功解密您加密的郵件。通過安全地重建相同的算法對象。
OBTW:
AESManaged具有密鑰大小REQ':128位= 16個字節!!! (8 * 8 = 64,64Bit/8bits per Byte = 8 Bytes)因此,
64 * 2 = 128Bit,8 * 2,> 16字節密鑰大小!
256Bit = 32Bytes !!!!
根據70-536官方培訓包的書,Aes限於128位的密鑰大小。例如256位,192和128密鑰大小可以與Rijndael類一起使用。
你可以從另一方面完全忘記了所有的垃圾,並簡單地使用.GenerateKey和GenerateIV方法,而不是救你整理出一個預共享,並同意密碼和靜態鹽值的所有麻煩。您唯一需要考慮的是找出存儲和檢索密鑰和IV字節數組的方法。二進制格式化程序? 。
如果你想使用AES256,那麼你的密鑰應該是32個字節,並設置KeySize屬性= 256。否則它將使用AES 128.你可以使用全零,但在安全上下文中,它不安全。是的,最好生成隨機密鑰(如在邁克爾霍華德 - 微軟的答案),並安全地存儲。 – 2015-02-12 06:36:46