【问题标题】:How do I encrypt a string in vb.net using RijndaelManaged, and using PKCS5 padding?如何使用 RijndaelManaged 和使用 PKCS5 填充加密 vb.net 中的字符串?
【发布时间】:2011-04-27 03:33:18
【问题描述】:

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

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

【问题讨论】:

    标签: vb.net encryption rijndaelmanaged pkcs#5


    【解决方案1】:

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

    编辑:

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

    【讨论】:

      【解决方案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
      

      注意:代码超出了我的想象,它根本无法运行...

      【讨论】:

      • 让我确认 100% - 您只是在加密之前将其添加到要加密的字符串中?你怎么知道你需要添加多少填充? EG - 如果你用完了 124 个字符,你需要将它扩展到 128 个吗?如果你有 129 个字符,你会四舍五入到 256 吗?
      • 不,你首先编码到字节[],然后填充。我将在这里扩展我的答案。
      • 如果我在使文本变长之前对文本进行编码,则会显示“要加密的数据长度无效。”。我想这意味着我需要在加密之前对其进行扩展?
      • 字符串 -> 编码 -> 缓冲区 -> 增加缓冲区 -> 用适当的值填充填充 -> 加密
      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多