簡體   English   中英

C#中的Rijndael密鑰大小

[英]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.

MSDN文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM