2016-03-03 421 views
2

RijndaelManaged是一種算法,AES是標準。當提到AES256時,這是否意味着我在RijndaelManaged中使用的密鑰長度必須是256個字符?RijndaelManaged密鑰長度是否與AES [密鑰長度]相同?

如果我有這樣一個關鍵:

key = "mytestkey"; 

這是隻有9個字,這是否意味着我使用AES9?

+0

我認爲你需要[閱讀此](http://blogs.msdn.com/b/shawnfa/archive/2006/10/09/the-differences-between-rijndael-and-aes.aspx) –

+0

Rijndael的未修改版本與AES支持的密鑰大小完全相同,但唯一的區別是Rijndael支持不同的塊大小,而AES只有一個固定的塊大小。 –

+0

問題是RijndaelManaged的MDN文檔沒有指定默認的塊大小,所以最好指定它。 – zaph

回答

3

埃斯/ Rijndael密鑰大小是位,而不是字符; AES256使用256位密鑰。你必須給它一個恰好是256位的密鑰。 AES標準和Rijndael只接受128,192或256位的密鑰大小。

你不應該交換AES和Rijndael。 AES標準來自Rijndael,但它們不完全相同。如果您希望使用AES,請對所有操作使用AES;如果你想使用Rijndael,請使用Rijndael進行所有操作。

"mytestkey"不能直接成爲AES256的關鍵,也不是類似的Rijndael模式;它不是256位長。爲了將其用作密鑰,您必須將其轉換爲256位長的字節塊。

如果您使用密碼,一個典型的方法是使用key stretching,使用散列算法,如PBKDF2Scrypt。 PBKDF代表「基於密碼的密鑰派生函數」,它基本上就是你正在做的 - 從密碼派生密鑰。

理論上你也可以只用SHA256(總是有256位輸出)來散列密碼,並使用該256位塊作爲AES的密鑰;從安全的角度來看,這樣做是不明智的,因爲預先計算密碼SHA散列相對容易。

請記住,如果您使用的密碼熵很小,那麼加密的安全性會受到影響 - 有人猜測密鑰的時間可能會很短。 "mytestkey"熵最多隻有42位 - 你只使用小寫字母,所以每個地方有26個值,並且有9個地方(9個字符)。因此理論上需要存儲的位數是。在這種情況下,你將使用AES256和一個只有〜42位熵的密鑰。

我應該注意到,這裏給出的建議是從安全角度對如何將密碼轉換爲密鑰的不完整處理。如果您想更好地瞭解如何從密碼中正確生成密鑰,我建議您從owasp.org上的一些閱讀開始,例如Password Storage Cheat Sheet

+0

它需要至少128位,爲什麼「mytestkey」工作?一切都經過加密和解密沒有問題。 – 4thSpace

+1

許多庫都是null pad的鍵,但不正確的做法是不使用*正確的密鑰大小。 – zaph