2017-04-13 30 views
1

私は、Blowfish ECB暗号化とcipherMode 0、出力1を使用する必要があるクライアントを抱えています。コードを修正するにはどうしたらいいですか?ここでBlowfish ECB暗号化(C#実装)

は、完全なクライアント命令は、次のとおりです。

アルゴリズム:フグ ・モード:ECB ・パディング:我々はECBモードを使用しているため *初期ベクトルをPKCS5Paddingは不要です。

・キー暗号化:99:3280:テキスト→2fs5uhnjcnpxcpg9 を20120201123050 暗号文→:daa745f1901364c0bd42b9658db3db96336758cd34b2a576 は* 16進数文字で暗号文を保管してください。 *「salt」を含まない暗号テキストを生成してください。

私はこれをC#で記述する必要があります。ここに私がやったことだが、それが動作していないようです:

string member_id = "3280"; 
     string panelType = "99"; 
     string RandomString = "20120201123050"; 
     string encryptionKey = "2fs5uhnjcnpxcpg9"; 
     string cryptstr = member_id + ":" + panelType + ":" + RandomString; 
     string plainText = cryptstr; 
     BlowFish b = new BlowFish(encryptionKey); 
     string cipherText = b.Encrypt_ECB("3280:99:20120201123050"); 

結果がdaa745f1901364c0bd42b9658db3db96336758cd34b2a576ではありません。どこで私は間違えましたか?

+2

これは、最悪のセキュリティ賢明です!ブローフィッシュの作者でさえ、それをこれ以上使用することはなく、今ではAESを使用しています。 ECBモードを使用しないでください。安全ではありません。[ECBモード](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29)を参照して、ペンギンまでスクロールしてください。 – zaph

+0

Blowfishクラスを取得するために、何をインポートしていますか?そして、あなたがパディングのために何かを設定するのを見ることができないので、Blowfishクラスが入っているライブラリのドキュメントが使用しているというデフォルトは何ですか? –

+0

最終的にセキュリティを更新する時期です.AESは15年間利用可能です。クライアントは実際には努力して、もう15年待つのはばかげているはずです。 – zaph

答えて

1

Encrypt_ECB()だから私はそのシュナイアのクラスを想定している。

BlowFish b = new BlowFish(Encoding.UTF8.GetBytes(encryptionKey)); 

出力がまだ正しくない、それは本当に自分の例を復号化することによって、あるべきものを見ることができます:

ctorのは、1が渡された場合、あなたはバイト配列のための過負荷を必要とする16進数の文字列を期待します:

string clear = b.Decrypt_ECB("daa745f1901364c0bd42b9658db3db96336758cd34b2a576"); 

は私達を与える:

良いのですが、ある
"3280:99:20120201123050\u0002\u0002" 

2 0最終的にx2バイトであり、N×0xNはPKCSパディングによるものである。一致を得るには、入力をパッドする必要があります。

// input to bytes 
List<byte> clearBytes = new List<byte>(Encoding.UTF8.GetBytes("3280:99:20120201123050")); 

// how many padding bytes? 
int needPaddingBytes = 8 - (clearBytes.Count % 8); 

// add them 
clearBytes.AddRange(Enumerable.Repeat((byte)needPaddingBytes, needPaddingBytes)); 

// encrypt 
byte[] cipherText = b.Encrypt_ECB(clearBytes.ToArray()); 

// to hex 
string cipherTextHex = BitConverter.ToString(cipherText).Replace("-", "").ToLowerInvariant(); 
関連する問題