4

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

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

4

2 回答 2

6

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

编辑:

PKCS#7 填充在PKCS#7 规范的第 10.3 节中进行了描述。PKCS#5 填充在PKCS#5 规范第 6.1.1 节第 4 部分中进行了描述。正如您通过检查看到的,填充算法是相同的。

于 2010-10-18T23:59:11.947 回答
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

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

于 2010-10-18T20:06:38.173 回答