如何使用RijndaelManaged加密vb.net中的字符串,并使用PKCS5填充?

时间:2010-10-18 20:01:54

标签: vb.net encryption rijndaelmanaged pkcs#5

我使用以下代码初始化加密...

 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支持它?

2 个答案:

答案 0 :(得分:6)

PKCS7填充和PKCS5填充是一回事。在这种情况下,它们是同义词。

编辑:

PKCS#7填充在第10.3节PKCS#7 spec中描述。 PKCS#5填充在第6.1.1节第4步中的PKCS#5 spec中描述。通过检查可以看出,填充算法是相同的。

答案 1 :(得分: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

注意:代码不在我的脑海中,根本不可运行......