Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Ver- und Entschlüsselung funktioniert nicht
dschenk224
myCSharp.de - Member



Dabei seit:
Beiträge: 14
Herkunft: Potsdam

Themenstarter:

Ver- und Entschlüsselung funktioniert nicht

beantworten | zitieren | melden

Irgendwie komme ich nicht weiter.
Zielstellung: Benutzereingabe in Form - Passwort soll gespeichert werden.
Passwort wird verschlüsselt und dann in eine Textdatei geschrieben und bei Bedarf wieder entschlüsselt.
Ich weiss, ich habe einen Fehler in der Denkweise, aber ich komme irgendiwe nicht drauf!


class CCrypt
    {
        public byte[] Crypt(string StrInput, out byte[] ByKey, out byte[] ByIV)
        {
            try
            {
                RijndaelManaged RMRijndal = new RijndaelManaged();
                ASCIIEncoding AEConvert = new ASCIIEncoding();
                byte[] ByEncrypted;
                byte[] ByToEncrypt;
                RMRijndal.GenerateKey();
                RMRijndal.GenerateIV();
                ByKey = RMRijndal.Key;
                ByIV = RMRijndal.IV;
                ICryptoTransform ICTEncryptor = RMRijndal.CreateEncryptor(ByKey, ByIV);
                MemoryStream MsEncrypt = new MemoryStream();
                CryptoStream CsEncrpyt = new CryptoStream(MsEncrypt, ICTEncryptor, CryptoStreamMode.Write);
                ByToEncrypt = AEConvert.GetBytes(StrInput);
                CsEncrpyt.Write(ByToEncrypt, 0, ByToEncrypt.Length);
                CsEncrpyt.FlushFinalBlock();
                ByEncrypted = MsEncrypt.ToArray();
                return ByEncrypted;
            }
            catch (CryptographicException e)
            {
                MessageBox.Show("A Cryptographic error occurred: {0}", e.Message);
                ByKey = null;
                ByIV = null;
                return null;
            }
            
        }


class CDecrypt
    {
        public string Decrypt(byte[] ByInput, byte[] ByKey, byte[] ByIV)
        {
            try
            {
                RijndaelManaged RMRijndal = new RijndaelManaged();
                ASCIIEncoding AEConvert = new ASCIIEncoding();
                byte[] BySource;
                ICryptoTransform ICDecryptor = RMRijndal.CreateDecryptor(ByKey, ByIV);
                MemoryStream MsDecrypt = new MemoryStream(ByInput);
                CryptoStream CsDecrypt = new CryptoStream(MsDecrypt, ICDecryptor, CryptoStreamMode.Read);
                BySource = new byte[ByInput.Length];
                CsDecrypt.Read(BySource, 0, BySource.Length);
                string StrOutput = AEConvert.GetString(BySource);
                return StrOutput;
            }
            catch (CryptographicException e)
            {
                MessageBox.Show("A Cryptographic error occurred: {0}", e.Message);
                return null;
            }
        }
Speichern per Button mit:


private void BtSave_Click(object sender, EventArgs e)
        {
            byte[] ByKey, ByIV;
            CCrypt crypt = new CCrypt();
            ASCIIEncoding AEEncoding = new ASCIIEncoding();
            CSqlSettings settings = new CSqlSettings();
            String[] AStrSettings = new string[6];
            AStrSettings[0] = TbServername.Text;
            AStrSettings[1] = TbUsername.Text;
            AStrSettings[2] = AEEncoding.GetString(crypt.Crypt(TbPassword.Text, out ByKey, out ByIV));
            AStrSettings[3] = CbDatabase.SelectedItem.ToString();
            AStrSettings[4] = AEEncoding.GetString(ByKey);
            AStrSettings[5] = AEEncoding.GetString(ByIV);
            settings.WriteSetting(AStrSettings);
            BtCancel.Text = "Close";
            BtSave.Enabled = false;
        }
Vielen Dank für die Mühe
Daniel
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo dschenk224,

was genau geht denn nicht?

Heute scheint der Tag von [Hinweis] Wie poste ich richtig? Punkt 5 zu sein.

herbivore
private Nachricht | Beiträge des Benutzers
dschenk224
myCSharp.de - Member



Dabei seit:
Beiträge: 14
Herkunft: Potsdam

Themenstarter:

beantworten | zitieren | melden

Hallo herbivore,

Beim debugging springt er bei


 CsDecrypt.Read(BySource, 0, BySource.Length);
in die Exception.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo dschenk224,

hast du [Hinweis] Wie poste ich richtig? Punkt 5 gelesen? Wie lautet die Exception und die genaue Meldung? Bitte lass dir nicht alles aus der Nase ziehen.

herbivore
private Nachricht | Beiträge des Benutzers
dschenk224
myCSharp.de - Member



Dabei seit:
Beiträge: 14
Herkunft: Potsdam

Themenstarter:

beantworten | zitieren | melden

Hallo herbivore,
ausgelöst wird eine CryptographicException, die ich ja auch im Code angegeben habe.
Die Meldung lautet:
Padding is invalid and cannot be removed.

Das Problem ist, dass wenn ich die Encryption/Decryption ohne Zwischenspeichern in eine Textdatei ausführe, funktioniert es wunderbar, ausser, dass dem string noch bis zur Auffüllung von 16 Bit eine entsprechende Anzahl

\0
angefügt werden.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

Hi dschenk224,

ich schätze mal, das Problem liegt daran, daß du deinen MemoryStream nach dem Einlesen nicht wieder auf die Startposition zurücksetzt. Dadurch können keine Daten gelesen werden weil der Zeiger bereits am Ende des Strings steht.

Probier mal folgendes:


MemoryStream MsDecrypt = new MemoryStream(ByInput);
MsDecrypt.Position = 0;

Schöne Grüße,
Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
dschenk224
myCSharp.de - Member



Dabei seit:
Beiträge: 14
Herkunft: Potsdam

Themenstarter:

beantworten | zitieren | melden

Hallo Christian,
vielen Dank für deine Nachricht.
Leider hat dies nicht den erwünschten Erfolg gebracht - die Exception wird immer noch mit der selbene Fehlermeldung ausgelöst.
Viele Grüsse
Daniel
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

Schau dir das mal an, vielleicht hilft es. Unexplained CryptographicException
Again what learned...
private Nachricht | Beiträge des Benutzers
dschenk224
myCSharp.de - Member



Dabei seit:
Beiträge: 14
Herkunft: Potsdam

Themenstarter:

beantworten | zitieren | melden

Hallo rollerfreak2,
vielen Dank. Zumindest die Exception wird nicht mehr ausgelöst - hab aber irgendwie noch ein komisches Ergebnis.
Ergebnis vor der Encryption und nach der Decryption ist irgendwie nicht identisch.
private Nachricht | Beiträge des Benutzers