2009-04-01 15 views
0

ではありません.C++ブローフィッシュは、<の8文字未満のブロックを暗号化することをサポートしていますが、.NETではありません。両方のC++やC#アプリケーションでC++ブローフィッシュは文字数が少なくても動作しますが、C#ブローフィッシュは

-->C# NET Blowfish<-- -->C++ Blowfish<--

、私は、次の配列の両方のC++やC#アプリケーションで

byte response[6] = 
    { 
     0x00, 0x80, 0x01, 0x61, 0x05, 0x06 
    }; 

を暗号化し、Iは同じパラメータで暗号化関数を呼び出します。

C++ 
Blowfish.Encrypt((LPBYTE)responce + 2,(LPBYTE)responce + 2, 4); 

C# 
Blowfish.Encrypt(responce, 2, responce, 2, responce.Length - 2); 

しかし、Cでは、データは暗号化されていますが、C#では暗号化されません。

の行45,47および49は、行45の計算の後に問題のある行です。結果は0になります。行47は2 + 0 = 2になり、行49 2は2以上になりません。ループ。

C++ブロッフィッシュにはいくつかのパディングがありますが、理解しようとすると失われます。

私の問題は、C#でのパディングはC++とまったく同じでなければならないということです。有効な答えが得られます。ランダムパディングは使用できず、解読後に役に立たないバイトを取り除くことはできません。サーバI暗号化された配列を送るのは私のものではありません。

C++の稚魚でどのようなパディングが使用されているのか、それをC#NETでどのように実装するべきかを教えてください。

//注:このパケットを複数回、一度だけ送信する必要はありません。

ありがとうございます!

+0

http://stackoverflow.com/questions/692810/c-problem-using-blowfish-net-how-to-convert-from-uint32-to-byte - おそらくこれはあなたに手がかりを与える可能性があります –

答えて

2

あなたがpastebinnedコードは(誰もがしばらくそれを読めば、あなたのペーストは、それによって壊れたこの質問を残して、削除されるように、途中でSOにはお勧めしません)、そのヘッダのコメントで述べている:

/// Note that the number of bytes must be adjusted to the block size of the algorithm. 

(3行目と4行目)。したがって、それがあなたの小さすぎるデータを無視するなら、それはspecに振る舞っているようです。

C++コードがnullバイトでパディングしているようで、コメントが書かれています:

// pad end of data with null bytes to complete encryption 

小柄な入力をどのように処理するかを確認するために、C++の関数GetOutputLength()を見て参考になります。私はそれが上方に丸められると思うが、確認するのがいいだろう。

+0

@unwind、助けてくれてありがとう!機能はここに見ることができます - >> http://pastebin.com/m71b97dc6 有効な回答が得られたら私の質問を編集しますので、将来は生き続けるでしょう。 –

関連する問題