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 パディングは、セクション 10.3のPKCS#7 仕様で説明されています。PKCS#5 パディングは、セクション 6.1.1 のステップ 4 のPKCS#5 仕様で説明されています。調べてみるとわかるように、パディング アルゴリズムは同じです。

于 2010-10-18T23:59:11.947 に答える
2

暗号化されたデータを読み取るには、他の誰かが必要であり、そのようなパディングのみを理解する必要があると思います。

おそらくご存知のとおり、PKCS5 は次のように説明されています。

PKCS#5 パディングは次のように機能します。ブロックを埋めるために残っているバイトには、ブロックを埋めるために追加されたバイト数である数値が割り当てられます。たとえば、16 バイトのブロックがあり、11 バイトしか満たされていない場合、5 バイトをパディングする必要があります。これらの 5 バイトにはすべて、5 バイトのパディングとして値「5」が割り当てられます。

さて、あなたはあなたの情報を持っています - 文字列を byte[] にエンコードし、それを拡張して 16 バイトに揃え、レシピに従って残りを埋めます。次に、Padding.None で暗号化します。

そんなに面倒ではないはずです。とにかく、文字列の暗号化はありませんので、とにかくバイト[]にエンコードするので...

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 に答える