Passwörter Entschlüsseln Rijndael

Hallo Leute,
mein Lehrer hat ein Programm in Java erstellt womit er Passwörter verschlüsseln kann.
Jetzt sollen wir in C# ein eigenes Programm erstellen was die Passwörter entschlüsselt.
Also ich kopiere den Verschlüsselten Text in meine Textbox und drücke auf entschlüsseln und raus soll der entschlüsselte Wert kommen in dem Fall Test.

Man gibt den Key und den Text den man verschlüsseln möchte in einer Textbox ein.

Key: 1234567890123450
Keylength: 16
Hash Class: SHA1
Cipher Class: Rijndael = AES
Text: Test
Text Crypt: TWFF7r1zuGLriL4fQ/gI5gWDRBvYxvpcTiVFvEuEsU7bErvGtSdNug==
Text Encrypt: Test

Der Modus ist CBC und es wird base64 benutzt

Kann mir jemand sagen wie ich das umsetzen soll ?
Hat vielleicht jemand ein Code für mich?

LG,
Move
 
Nachdem du den Key durch den Benutzer erhalten hast (oder sonst was)
übergibst du ihn als ersten Parameter an RijndaelManaged::CreateEncryptor
(die Existenz des Objekts vorausgesetzt)
Der Beispielcode zeigt eigentlich alles, was man braucht.
 
Key: 1234567890123450
Keylength: 16
Hash Class: SHA1 <----------
Cipher Class: Rijndael = AES
Text: Test
Text Crypt: TWFF7r1zuGLriL4fQ/gI5gWDRBvYxvpcTiVFvEuEsU7bErvGtSdNug==
Text Encrypt: Test
 
Wie schon bei deinen zwei vorigen Aufgaben hat der Lehrer wohl einfach alle Algorithmen, die er über das Ganze Jahr verwendet, in die Angabe reingeklatscht, auch wenn sie für die eine Aufgabe gar nicht relevant sind.
(und dafür vermutlich wichtige andere Infos weggelassen.)

SHA1 ist hier sehr sicher komplett egal.
 
Zuletzt bearbeitet:
Hallo Leute,
ich habe eine Form erstellt womit man Texte verschlüsseln kann.
Das Verschlüsseln klappt aber bei der Entschlüsselung bekomme ich eine FormatException.
Code:
System.FormatException wurde nicht behandelt.
  HResult=-2146233033
  Message=Ungültige Länge für Base-64-Zeichenarray oder -Zeichenfolge.
  Source=mscorlib
  StackTrace:
       bei System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength)
       bei System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
       bei System.Convert.FromBase64String(String s)
       bei RijndaelSHA.Form1.Entschlüsseln(String CipherText) in Form1.cs:Zeile 128.
       bei RijndaelSHA.Form1.btnEntschlüsseln_Click(Object sender, EventArgs e) in Form1.cs:Zeile 34.
       bei System.Windows.Forms.Control.OnClick(EventArgs e)
       bei System.Windows.Forms.Button.OnClick(EventArgs e)
       bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       bei System.Windows.Forms.Control.WndProc(Message& m)
       bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
       bei System.Windows.Forms.Button.WndProc(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       bei System.Windows.Forms.Application.Run(Form mainForm)
       bei RijndaelSHA.Program.Main() in Program.cs:Zeile 19.
       bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Threading.ThreadHelper.ThreadStart()
  InnerException:

Folgende Komponenten benutze ich.
1 Textbox(Text der Verschlüsselt werden soll)
1 Textbox(Salt)
1 Textbox(Verschlüsselte Text)
1 Button(Verschlüsseln)
1 Button(Entschlüsseln)


C#-Code:
C#:
private void btnVerschluesseln_Click(object sender, EventArgs e)
         {
             key = Convert.ToString(txtkey.Text);
             EnValue = Convert.ToString(txttext.Text);
             txtcrypt.Text = Verschlüsseln(key);
        }

        private void btnEntschluesseln_Click(object sender, EventArgs e)
        {
            EnValue = Convert.ToString(txtcrypt.Text);
            key = Convert.ToString(txtkey.Text);
            txttext.Text = Entschluesseln(key);
        }

public string Verschluesseln(string Text)
        {
            string passPhrase = txttext.Text;   //   "text"
            string saltValue = txtkey.Text;     //   "Zufällig gewählte Zeichenfolge"
            string hashAlgorithm = "SHA1"; // Hash Klasse

            int passwordIterations = 2;
            string initVector = "n82r3n834r834911";   //  "bezeichnet einen Block von Zufallsdaten"
            int keySize = 256;

            byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
            byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);

            byte[] plainTextBytes = Encoding.UTF8.GetBytes(Text);

            PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);

            RijndaelManaged aes = new RijndaelManaged();
            byte[] keyBytes = password.GetBytes(keySize / 8);

            aes.Mode = CipherMode.CBC;

            ICryptoTransform encryptor = aes.CreateEncryptor(keyBytes, initVectorBytes);

            MemoryStream memoryStream = new MemoryStream();
            {
                CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
                cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                cryptoStream.FlushFinalBlock();
                byte[] cipherTextBytes = memoryStream.ToArray();

                using (StreamWriter swEncrypt = new StreamWriter(memoryStream))
                {
                    swEncrypt.Write(Text);
                }
            }

            string cipherText = Convert.ToBase64String(memoryStream.ToArray());
            return cipherText;
        }

public string Entschluesseln(string CipherText)
        {
            string passPhrase = null;   //   "Text"
            string saltValue = txtkey.Text;     //   "Zufällig gewählte Zeichenfolge"
            string hashAlgorithm = "SHA1";

            int passwordIterations = 2;
            string initVector = "n82r3n834r834911";   //  "bezeichnet einen Block von Zufallsdaten"
            int keySize = 256;

            byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector); //Formatiert den initVektor zu Bytes
            byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
//Formatiert den Salzwert zu Bytes
            byte[] cipherTextBytes = Convert.FromBase64String(CipherText); // Hier kommt die Exception 

            PasswordDeriveBytes key = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);

            byte[] keyBytes = key.GetBytes(keySize / 8);

            RijndaelManaged symmetricKey = new RijndaelManaged();

            symmetricKey.Mode = CipherMode.CBC;
            ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);

            MemoryStream memoryStream = new MemoryStream(cipherTextBytes);

            CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);

            byte[] plainTextBytes = new byte[cipherTextBytes.Length];

            int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);

            string plainText = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);

            return plainText;
        }
Wieso ist das Zeichenarray ungültig ?
Ich glaube ich habe tomaten auf den Augen :confused:
 
Zuletzt bearbeitet von einem Moderator:
Da das die Fortsetzung zu deinem vorigen Thema ist hab ich den Beitrag auch dort hingeschoben.
(Die Infos im alten Teil sind wichtig für die Antwort, also...)

Was ist denn CipherText bei deinen Eingaben zB.?
 
Zurück