2016-11-30 4 views
0

私は暗号化されたテキストにRSAを使用しており、暗号化されたテキストをサーバに送信しています。私の問題は、サーバーが暗号化されたテキストを正しく読み取ることができないため、サーバーがテキストを復号化できないことです。 クライアントでの私のコードは次のとおりです。サーバはクライアント/サーバアプリケーションでRSAによって暗号化されたテキストを受信できません

byte[] plaintext; 
byte[] encryptedtext=new byte[128]; 
plaintext = ByteConverter.GetBytes("hello"); 
encryptedtext = Encryption(plaintext, RSAA.ExportParameters(false), false); 
textBox10.Text = ByteConverter.GetString(encryptedtext); 

byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textBox10.Text); 
networkStream.Write(bytesToSend, 0, bytesToSend.Length); 

サーバーでの私のコード:

byte[] buffer = new byte[handlerSocket.ReceiveBufferSize]; 
dataReceived = Encoding.ASCII.GetString(buffer, 0, buffer.Length); 
byte[] encryptedtext=new byte[128] ; 
// dataReceived = ByteConverter.GetBytes(dataReceived); 
encryptedtext = ByteConverter.GetBytes(dataReceived); 
byte[] decryptedtex = Decryption(encryptedtext, RSA.ExportParameters(true), false); 
if(decryptedtex!=null) 
    textBox4.Text = ByteConverter.GetString(decryptedtex); 

出力:クライアントで

、暗号化されたテキスト: 卅凉䂧즠淦燺◓㎜ზᄋ큺�㬧ᶥ숿둴ꖉ␽넵Տ懾쵌摘䙑원퀮歒�숈鬖姈㫑餓貜Dž手葏㻐㺿⣨ꇑ橿朁繱�䘧殍㲙㦱䟽躮Ồᒛ鈉嫡짟

が、暗号化されましたテキストがサーバーによって受信されると、次のようになります。 ????????????????????????????????????????????????????????? 、サーバーはテキストを復号化できません。

注:サーバーは、(....公開鍵、秘密鍵)

だから私はこの問題を解決する方法を、テキストを復号化するための正しい情報を持っていますか?

+0

テキストはどのようにサーバーに送信されますか?それはWCFですか、これはウェブアプリですか?クライアントはWebページかwinformsかWCFですか? – tgolisch

答えて

0

バイナリデータをASCII文字列に変換するだけで、すべての文字エンコードが一致することを期待することはできません。それはちょうどそのようには動作しません。

暗号化されたデータをbyte[]として送信します。例:

サーバー側でも同じ変更を加える必要があります。

:あなたは本当には(あなたがしたいと思う理由を私は理解していない)、文字列などのデータを送信したい 場合は、適切に保存される代わりに、ASCIIのbase64エンコードに

変換することができます

string b64Str = Convert.ToBase64String(encryptedtext); 

また、byte[]の変数名にencryptedtextを使用すると、誤解を招くおそれがあります。それを変更する必要があります。 RSAを使用してペイロードを送信する代わりに、対称鍵を送信するだけで済みます。しかし、それについて話すつもりならば、実際にはSslStream以上のTLSしか使用していないはずです。

関連する問題