Witam,
Próbuję napisać przesyłanie zaszyfrowanej przy pomocy RSA wiadomości między dwoma klientami wg następującego algorytmu:
- Klient 1 przesyła Klientowi 2 swój klucz jawny
- Klient 2 przesyła Klientowi 1 swój klucz jawny
- Klient 1 szyfruje swoją wiadomość używając klucza jawnego Klienta 2
- Klient 2 szyfruje swoją wiadomość używając klucza jawnego Klienta 1
- Klient 1 przesyła Klientowi 2 zaszyfrowaną przy pomocy klucza jawnego Klienta2 wiadomość
- Klient 2 przesyła Klientowi 1 zaszyfrowaną przy pomocy klucza jawnego Klienta1 wiadomość
- Klient 1 deszyfruje wiadomość używając swojego klucza prywatnego
- Klient 2 deszyfruje wiadomość używając swojego klucza prywatnego
Niestety, w punkcie 7 i 8, przy deszyfrowaniu wyskakuje mi błąd - "Złe dane". Zupełnie nie wiem dlaczego tak się dzieje. Czy ktoś mógłby mi pomóc?
Pomocny może okazać się kod( jest to kod dla klienta 1, kod klienta 2 jest analogiczny):
/* potrzebne zmienne */
string wiadomosc_do_klienta2Text = this.txtDoKlienta2.Text;
byte[] wiadomosc_do_klienta2Byte = System.Text.Encoding.Default.GetBytes(wiadomosc_do_klienta2Text);
byte[] zakodowana_wiadomosc_do_klienta2Byte;
string zakodowana_wiadomosc_do_klienta2Text;
string zakodowana_wiadomosc_od_klienta2Text;
byte[]zakodowana_wiadomosc_od_klienta2Byte;
byte[] odkodowana_wiadomosc_od_klienta2Byte;
string odkodowana_wiadomosc_od_klienta2Text;
CspParameters providerParam1 = new CspParameters(1, "Microsoft Strong Cryptographic Provider");
RSACryptoServiceProvider RSA_Klient1 = new RSACryptoServiceProvider(providerParam1);
string klucz_publiczny_Klienta1 = RSA_Klient1.ToXmlString(false);
string klucz_prywatny_Klienta1 = RSA_Klient1.ToXmlString(true);
string klucz_publiczny_Klienta2;
// Etap 1
// Klient 1 przesyła swój klucz publiczny Klientowi 2
streamWriter1do2.WriteLine(klucz_publiczny_Klienta1);
streamWriter1do2.Flush();
// Etap 2
// Klient 1 otrzymuje klucz publiczny Klienta 2
klucz_publiczny_Klienta2 = streamReader1od2.ReadLine();
MessageBox.Show(klucz_publiczny_Klienta2);
// Etap 3
// Klient 1 szyfruje swoją wiadomość, używając klucza publicznego Klienta 2...
RSA_Klient1.FromXmlString(klucz_publiczny_Klienta2);
zakodowana_wiadomosc_do_klienta2Byte = RSA_Klient1.Encrypt(wiadomosc_do_klienta2Byte, false);
// ... i przesyła ją Klientowi 2
zakodowana_wiadomosc_do_klienta2Text = System.Text.Encoding.Default.GetString(zakodowana_wiadomosc_do_klienta2Byte);
streamWriter1do2.WriteLine(zakodowana_wiadomosc_do_klienta2Text);
streamWriter1do2.Flush();
// Etap 4
// Klient 1 otrzymuje zakodowaną swoim kluczem publicznym wiadomość od Klienta 2
zakodowana_wiadomosc_od_klienta2Text = streamReader1od2.ReadLine();
//Etap 5
//Odszyfrowanie wiadomości od Klienta 2 i jej wyświetlenie
zakodowana_wiadomosc_od_klienta2Byte = System.Text.Encoding.Default.GetBytes(zakodowana_wiadomosc_od_klienta2Text);
RSA_Klient1.FromXmlString(klucz_publiczny_Klienta1);
odkodowana_wiadomosc_od_klienta2Byte = RSA_Klient1.Decrypt(zakodowana_wiadomosc_od_klienta2Byte, false);
odkodowana_wiadomosc_od_klienta2Text = System.Text.Encoding.Default.GetString(odkodowana_wiadomosc_od_klienta2Byte);
this.txtOdKlienta2.Text = odkodowana_wiadomosc_od_klienta2Text;
Błąd występuje w linijce:
odkodowana_wiadomosc_od_klienta2Byte = RSA_Klient1.Decrypt(zakodowana_wiadomosc_od_klienta2Byte, false);
Czy ktoś wie dlaczego?
Bardzo proszę o pomoc,
Pozdrawiam