[英]Rijndael key size in C#
我目前正在開發一個C#中的小工具,它允許我快速加密我的文件。 所以我用這個腳本看起來對我來說很完美。 但我仍然有一個問題:密鑰太短(最多8個字符)。 我在RijndaelManaged()文檔中讀到,密鑰的最大大小是256位,所以我應該能夠使用64個字符的密鑰......(如sha256哈希)
但每次我嘗試增加密鑰大小時,我都會得到一個很好的“加密失敗!”,即使是9個字符。 我一直在谷歌尋找解決方案一段時間,但沒有任何用處。
我找到的最好的事情就是這個 。 所以我試着改變填充像:
RMCrypto.Padding = PaddingMode.ISO10126;
// or
RMCrypto.Padding = PaddingMode.ANSIX923;
但它沒有改變任何東西......
Rjindael的鑰匙尺寸不能自由選擇。 它必須是128位,192位或256位。 它不能是,例如,9個字節或18個字節或36個字節。 它必須嚴格為16個字節,24個字節或32個字節。
此外,在正確使用類之前 ,應首先適當指定密鑰大小。 雖然允許128位和192位密鑰大小,但您不能將密鑰大小指定為128位但使用192位密鑰。 您指定的密鑰大小必須與您使用的密鑰大小相匹配。
這是一個如何做到的例子:
您可以在RjindaelManaged.KeySize
屬性中指定密鑰大小(不要與BlockSize
混淆):
RMCrypto.KeySize = 256;
然后byte []中的密鑰大小應與上面的密鑰大小匹配:
byte[] key = new byte[]{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
RMCrypto.Key = key;
請務必使用看起來像隨機噪音的密鑰以獲得一定的安全性。
目前您的密鑰太短:
string password = @"myKey123";
byte[] key = UE.GetBytes(password);
填充用於將明文填充到塊長度的大小,它與密鑰大小無關。
在Rijndael中,您只能使用長度為128,160,192,224或256位的密鑰。 (AES-128 - > 128位密鑰,AES-256 - > 256位密鑰。兩者的塊長度仍為128。
你不能輕易改變密碼的密鑰長度。 通常你會使用密鑰派生函數(在術語中使用散列函數)從密碼字符串中獲取128位(或任何你需要的大小)密鑰。
簡而言之,您誤解了填充以及您嘗試使用的密碼的密鑰長度。 如果您想要任意長度的密碼字符串,請使用密鑰派生函數。 您發布的第一個鏈接中的代碼使用例如Rfc2898DeriveBytes
類。
要設置密鑰長度,FIRST更改屬性.KeySize
,然后設置密鑰。
RijndaelManaged rijndaelCSP = new RijndaelManaged();
rijndaelCSP.KeySize = 256;
//derive key from password and set as .Key.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.