Laden...

Ungültige Länge für base-64-Zeichenarray oder -Zeichenfolge

Erstellt von ktownmods vor 6 Jahren Letzter Beitrag vor 6 Jahren 4.036 Views
K
ktownmods Themenstarter:in
13 Beiträge seit 2015
vor 6 Jahren
Ungültige Länge für base-64-Zeichenarray oder -Zeichenfolge

hey leute,

ich versuche alle zellen einer DataGridView mit aes_encrypt & aes_decrypt zu verschlüsseln & entschlüsseln was auch klappt wenn ich z.b. in die Zelle 123456 eintrage.

wäre super wenn mir hier einer helfen kann weil ich stehe gerade vollkommen auf dem schlauch wieso!?

Versuche ich das z.b. mit HalloVerschlüsselMich dann kommt dieser fehler:

Fehlermeldung:
ungültige länge für base-64-zeichenarray oder -zeichenfolge

Der encrypt und Decrypt code ist folgender:

private string Encrypt(string clearText)
        {
            string EncryptionKey = "key";
            byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                MemoryStream ms = new MemoryStream();

                CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write);
                //using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                //{
                cs.Write(clearBytes, 0, clearBytes.Length);
                cs.Close();
                //}
                clearText = Convert.ToBase64String(ms.ToArray());
                //}
            }
            return clearText;
        }

        //}

        private string Decrypt(string cipherText)
        {
            string EncryptionKey = "key";
            byte[] cipherBytes = Convert.FromBase64String(cipherText);
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                MemoryStream ms = new MemoryStream();

                CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write);

                cs.Write(cipherBytes, 0, cipherBytes.Length);
                cs.Close();

                cipherText = Encoding.Unicode.GetString(ms.ToArray());
            }


            return cipherText;
        }
3.003 Beiträge seit 2006
vor 6 Jahren

Ich kann mich irren, aber der Fehler wird vermutlich (hier müssen wir raten, weil du uns diese Information vorenthältst) von dieser Zeile hier ausgelöst:


byte[] cipherBytes = Convert.FromBase64String(cipherText);

Ist, wenn ich nix übersehe, auch die einzige Zeile, die genau diesen Fehler bringen kann. Die Methode erwartet eine gültige Base64-Zeichenkette. Die Länge muss eine durch 3 teilbare Zahl sein, ist sie es nicht, werden hinten ein oder zwei Gleichheitszeichen angehängt, damit sie es wird. Offenbar ist dies in deinem Versuch nicht der Fall, weshalb der Fehler kommt.

Anders als von dir dargestellt wäre das aber in der Decrypt-Methode, nicht in der Encrypt-Methode. Wie gesagt, wir raten hier etwas.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

K
ktownmods Themenstarter:in
13 Beiträge seit 2015
vor 6 Jahren

Danke für deine Nachricht
Welche infos genau brauchst du?
Den code vom datagridview?

3.003 Beiträge seit 2006
vor 6 Jahren

Den Stacktrace deiner Ausnahme. Andererseits, wenn du den hast, kannst du das Problem auch selbst eingrenzen...

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

K
ktownmods Themenstarter:in
13 Beiträge seit 2015
vor 6 Jahren

Mir ist gerade aufgefallen es lässt sich jeder text decrypten solange es die erste value in der zelle ist, sobald ich mehrere zellen mit text einfüge kommt der fehler aber komme gerade echt nicht darauf wie ich das fixxen kann.

Encrypt:

Fehlermeldung:
bei Customer_management.Logtxt.Encrypt(String clearText)
bei Customer_management.Logtxt.Add(String Kundenname, String Game, String Bezahlung, String Bezahlt, String Erledigt, String PayPalEmail, String ACCEmail, String ACCPW)
bei Customer_management.Logtxt.Schreibenbtn_Click(Object sender, EventArgs e)
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 Customer_management.Program.Main()

Decrypt:

Fehlermeldung:
bei Customer_management.Logtxt.Decrypt(String cipherText)
bei Customer_management.Logtxt.Decrypting()
bei Customer_management.Logtxt.Retrieve()
bei Customer_management.Logtxt.Add(String Kundenname, String Game, String Bezahlung, String Bezahlt, String Erledigt, String PayPalEmail, String ACCEmail, String ACCPW)
bei Customer_management.Logtxt.Schreibenbtn_Click(Object sender, EventArgs e)
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 Customer_management.Program.Main()

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

die ganze Wahrheit kann das in meinen Augen nicht sein 😕

Die von dir genannte Fehlermeldung kann eigentlich nur in der Decrypt-Methode ausgelöst werden, wo ich selbst vermutlich suchen würde, ob in irgendeiner Form der Output der "Encrypt"-Methode geändert wurde.

Also gäbe es meinerseits 2 Fragen:

  1. Welche Fehlermeldung wird in der ersten Methode ausgelöst?
    (Bei einem Test meinerseits sind Linebreaks, Prozentzeichen, etc. kein Problem)

  2. Was passiert nachdem die Encrypt-Methode was ausspuckt so alles mit dem Output?

LG