C# - szyfr Vigenere

0

Witam wszystkich,
jestem kompletnym laikiem w programowaniu (ok napisałem samodzielnie w C# program szyfrujący / deszyfrujący szyferm Cezara o dowolnie wybranym przesunięciu) a teraz męczę sę z szyfrem Vigenere.
Udało mi się stworzyć kod dzięki któremy szyfr działa ale wszystkie litery są zamieniana na UPERCASE (tekst jawny i hasło). Tak wiem w kodzie użyłem Char.ToUpper ale jak się tego pozbędę to szyfruje ale błędnie odszyfrowuje. Ponadto nie szyfruje cyfr.
Zatem prośba o wskazówki co powinienem poprawić aby programik szyfrował / deszyfrował małe i wielkie litery oraz liczby.
Z góry dziękuję za wskazówki

Skrawek mojego kodu:

private void szyfruj_Click(object sender, EventArgs e)
        {
            s = new StringBuilder(jawny.Text);
            key = klucz.Text;

            for (int i = 0; i < s.Length; i++) s[i] = Char.ToUpper(s[i]);
            key = key.ToUpper();
            int j = 0;
            for (int i = 0; i < s.Length; i++)
            {
                if (Char.IsLetter(s[i]))
                {
                    s[i] = (char)(s[i] + key[j] - 'A');
                    if (s[i] > 'Z') s[i] = (char)(s[i] - 'Z' + 'A' - 1);
                }
                j = j + 1 == key.Length ? 0 : j + 1;
            }
            zaszyfrowany.Text = s.ToString();

        }
0

Przepisałem kod od nowa (czytaj użyłem innego algorytmu i dopasowałem do swoich potrzeb) i mam:

private void szyfruj_Click(object sender, EventArgs e)
        {
            char encryptedChar;
            string encryptedText = "";
            int charIndexOfText, charIndexOfPassword, newIndex;
            char charOfText;
            char charOfPassword;
            string table = "";
            string result = "";
            string alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
            string text = jawny.Text;
            string password = klucz.Text;

            charIndexOfText = charIndexOfPassword = newIndex = 0;

            
            foreach (char value in password)
            {
                
                if (value == ' ')
                {
                    //do nothing
                }
                else
                {
                    
                    table += value;
                    result += value;
                }

                
                password = result;
            }

            for (int i = 0; i < text.Length; i++)
            {
                for (int j = 0; j < password.Length; j++)
                {

                    if (i < text.Length)
                    {
                        
                        charOfText = text[i];
                        charOfPassword = password[j];

                        if (charOfText == ' ')

                        {
                            
                            encryptedChar = charOfText;
                            encryptedText = encryptedText + encryptedChar;
                            i++;
                            j--;
                        }
                        else if (charOfText == '\n')// if encounters a new line in the text
                        {
                            
                            encryptedChar = charOfText;
                            encryptedText = encryptedText + encryptedChar;
                            i++;
                            j--;
                        }
                        else
                        {
                            
                            charIndexOfText = alphabets.IndexOf(charOfText);

                           
                            charIndexOfPassword = alphabets.IndexOf(charOfPassword);

                            
                            newIndex = (charIndexOfText + charIndexOfPassword) % 62;
                            encryptedChar = alphabets[newIndex];

                           
                            encryptedText = encryptedText + encryptedChar;
                            i++;
                        }
                    }
                }
                i--;
            }
           zaszyfrowany.Text = encryptedText;

        }

Znaczy problem rozwiązany

1 użytkowników online, w tym zalogowanych: 0, gości: 1