0

レガシーソフトウェアによって暗号化されたデータを復号化する必要があるアプリケーションをC#で作成しています。レガシーコードは、暗号化されていないバイトを8のチャンクでループし、CBCモードのTripleDESを介して暗号化します。次に、残りの量のブロックサイズ(この特定の場合は2)を使用して、TripleDESCFBを使用して残りのバイトを処理します。

64ビット(8バイト)のブロックサイズが可能であるため、System.Security.Cryptography.TripleDESを使用して、C#の最初のフェーズからデータの暗号化を解除できます。ただし、 TripleDESクラスでは、16ビットのブロックサイズは許可されません。次のコードは、「指定されたブロックサイズはこのアルゴリズムでは無効です」というエラーをスローします。

TripleDES provider = TripleDESCryptoServiceProvider.Create();
provider.Mode = CipherMode.CFB;
provider.BlockSize = 16; // exception thrown here

小さなブロックサイズの性質が弱いため、これが適切に行われていると思います。残念ながら、それは私が立ち往生しているものです。TripleDES / CFBの16ビットブロックサイズをサポートする可能性のある無料のサードパーティライブラリはありますか?または、これを機能させるためにこのデータセットで使用できるトリックはありますか?DESクラスをチェックして、16ビットのブロックサイズをサポートしているかどうかを確認しましたが、ダイスはサポートしていません...

私は暗号化の専門家ではないので、TripleDES用に独自のコード(2バイト以上... grrr)をロールする必要がある場合は、アルゴリズムの詳細に関する簡単な記事が非常に役立ちます。

4

2 に答える 2

2

1つの可能性は、平文の最後の2バイトが最後の暗号化された暗号ブロックの2バイトと単純にXORされ、残りが破棄されることです。.NETクラスを使用してこの動作を取得するには、十分に単純である必要があります。

  1. ブロックサイズを64ビットに設定します。
  2. モードをCFBに設定します。
  3. フィードバックサイズを64ビットに設定します
  4. 入力を8バイトの倍数になるようにパディングします。余分なデータを破棄するため、どのパディングを使用してもかまいません。
  5. ブロックを変換します。
  6. 残留物を捨てます。
于 2012-06-28T23:38:47.440 に答える
0

MSDNでは、このプロパティを使用してブロックサイズを設定できると述べていますが、DES(および3DES)は64ビットブロックのみを使用するように作成されているため、3DESに16ビットブロックサイズを設定することは不可能だと思います。

レガシーソフトウェアは、暗号化される最後のブロックにいくつかのパディングスキームを使用していると思います。通常、残りのバイトをランダムな値で埋め、これらの不要なバイトの数を最後のバイトに保存します。

于 2012-06-28T14:14:33.597 に答える