2010-10-18 47 views
3

我用下面的代碼來初始化加密...如何使用RijndaelManaged加密vb.net中的字符串,並使用PKCS5填充?

Dim symmetricKey As New System.Security.Cryptography.RijndaelManaged() 
With symmetricKey 
    .Key = Encoding.ASCII.GetBytes(Key) 
    .IV = Encoding.ASCII.GetBytes(IV) 
    .Mode = CipherMode.CBC 
    .BlockSize = 128 
    .KeySize = 128 
    .Padding = PaddingMode.PKCS7 
End With 

要求是使用PKCS5。在vb.net填充模式僅包括

  • ANSIX923
  • ISO10126
  • PKCS7

所以我不認爲這是對PKCS5的方法。有什麼方法可以添加它,或者我需要自己編寫一種加密方法嗎?如果是這樣 - 我怎麼寫?有沒有可以支持它的可靠DLL?

回答

5

PKCS7填充和PKCS5填充是同樣的事情。在這種情況下,它們是同義詞。

編輯:

的PKCS#7填充在PKCS#7 spec在第10.3節中描述。 PKCS#5填充在PKCS#5 spec的6.1.1步驟4中描述。正如您通過檢查可以看到的那樣,填充算法是相同的。

+0

事實上,它確實是:) – 2010-10-19 06:27:43

+0

有源嗎? – digiguru 2010-10-19 09:51:46

2

我猜你需要別人來閱讀你的加密數據,然後才明白那種填充。

正如你可能知道,PKCS5作爲解釋:

PKCS#5填充的工作原理如下:剩下來一補塊的字節分配一個號碼,這是添加至該字節數填充塊。例如,如果我們有一個16字節的塊,並且只有11個字節被填充,那麼我們有5個字節來填充。對於5個字節的填充,這5個字節全部被分配值「5」。

那麼,你有你的信息 - 將字符串編碼爲byte [],將其擴展爲16字節,然後根據配方填寫其餘部分。然後,用Padding.None加密。

猜猜它不應該這麼麻煩。無論如何,沒有加密字符串,所以你既然編碼的東西爲byte []反正...

string message="lorem ipsum and stuff"; 
byte[] result=Text.Encode(message); 
int packets=result.Length/16; 
int paddingSize=16-(result.Length-(packets*16)); 
if (paddingSize!=16) 
{ 
    byte[] newbuffer=new byte[result.Length+paddingSize]; 
    packets.CopyTo(newbuffer); 
    for (int n=result.Length;n<newbuffer.Length;n++) 
    { 
     newbuffer[n]=16-paddingsize; 
    } 
} 
// then, encrypt result or newbuffer, depending on if padding is 16 or not 

注:代碼是從我的頭,這不是可運行在所有...

+0

讓我確認100% - 你只是把它添加到您要加密加密之前它的字符串?你怎麼知道你需要添加多少填充? EG - 如果您使用了124個字符,您需要將其擴展到128?如果你有129個字符,你會把256加起來嗎? – digiguru 2010-10-18 22:01:45

+0

不,你第一個編碼器到字節[]然後填充。我會在這裏擴大我的答案。 – 2010-10-18 22:22:35

+0

如果我在對文本進行更長的編碼之前對其進行了編碼,那麼它會顯示「要加密的數據的長度無效」。我想這意味着我需要在加密之前增加它? – digiguru 2010-10-19 09:46:08

相關問題