Laden...

Verschlüsselung als Klasse?!

Erstellt von ZeroQool vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.863 Views
Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 17 Jahren
Verschlüsselung als Klasse?!

Hallo, habe die Suchf. bereits genutzt, aber nichts passendes gefunden. Muss auch am Anfang sagen, dass ich mit c# erst diese Woche begonnen habe.

Ich habe folgende Schnipsel

private SymmetricAlgorithm SetEnc()
    {
      if (optDES.Checked)
        return new DESCryptoServiceProvider();
      else
        return new TripleDESCryptoServiceProvider();
    }
    private SymmetricAlgorithm mCSP;
    private void btnKeyGen_Click(object sender, EventArgs e)
    {
      mCSP = SetEnc();

      mCSP.GenerateKey();


      txtKey.Text = Convert.ToBase64String(mCSP.Key);
    }

    private void btnIVGen_Click(object sender, EventArgs e)
    {
      mCSP.GenerateIV();

      txtIV.Text = Convert.ToBase64String(mCSP.IV);
    }

    private void cmdEncrypt_Click(object sender, EventArgs e)
    {
      txtEncrypted.Text = EncryptString(txtOriginal.Text);
    }
    private string EncryptString(string Value)
    {
      ICryptoTransform ct;
      MemoryStream ms;
      CryptoStream cs;
      byte[] byt;

      ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);

      byt = Encoding.UTF8.GetBytes(Value);

      ms = new MemoryStream();
      cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
      cs.Write(byt, 0, byt.Length);
      cs.FlushFinalBlock();

      cs.Close();

      return Convert.ToBase64String(ms.ToArray());
    }

    private void button1_Click(object sender, EventArgs e)
    {
       txtEncrypted.Text = EncryptString(txtOriginal.Text);

        
    }

Das funktioniert wunderbar. ich kann die 2 Schlüssel erstellen u damit ver-u. entschlüsseln, aber nun wollte ich die Verschlüsselung in einer Klasse packen und von einem anderen Formular imgrunde aufrufen, aber ich habe immer eine Fehlermeldung.

Meine erstellte Klasse:

using System;
using System.Collections.Generic;
using System.Text;

using System.Collections;
using System.ComponentModel;
using System.Security.Cryptography;
using System.IO;


namespace eBayAPI_Server
{
  public class Verschluesselung
  {
    public const string cKey   = "OXc9OQSZNXMWwE2VehLdfjSrwAH+uMH/";
    public const string cKeyIV = "qxPc+5RGqeE=";

    private static SymmetricAlgorithm mCSP;

    //public SymmetricAlgorithm SetEnc()
    //{
    //  return new TripleDESCryptoServiceProvider();
    //}

    public static string DecryptStringKlasse(string Value)
    {
      SymmetricAlgorithm SetEnc = TripleDESCryptoServiceProvider.Create();
      mCSP = SetEnc;
      mCSP.Key = Convert.FromBase64String(cKey);
      mCSP.IV  = Convert.FromBase64String(cKeyIV);

      ICryptoTransform ct;
      MemoryStream ms;
      CryptoStream cs;
      byte[] byt;

      ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);

      byt = Convert.FromBase64String(Value);     // HIER HABE ICH EINE FEHLERMELDUNG (Ungültige Zeichen in einer Base-64-Zeichenfolge.)
      ms = new MemoryStream();
      cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
      cs.Write(byt, 0, byt.Length);
      cs.FlushFinalBlock();

      cs.Close();

      return Encoding.UTF8.GetString(ms.ToArray());
    }

  }
}

FEHLER:

      byt = Convert.FromBase64String(Value);     // HIER HABE ICH EINE FEHLERMELDUNG (Ungültige Zeichen in einer Base-64-Zeichenfolge.)

weiß jemand wa sich falsch mache? big thx im voraus.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo ZeroQool,

naja, die Fehlermeldung ist doch recht eindeutig. Hast du dir den String mal angeguckt?

herbivore

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 17 Jahren

Ja, habe ich

Server=localhost;Database=Northwind;UID=sa;PWD=sa

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo ZeroQool,

naja, das ist ja ein "normaler" String und kein Base64-String. Meinst du vielleicht ToBase64String statt FromBase64String?

herbivore

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 17 Jahren

Sollte eigentlich richtig sein, wie gesagt, wenn ich die ganzen Funktionen in meinem Formular habe klappt alles, nur nicht wenn ich die Funktionen ect. in eine Klasse packe dann gehts nicht.

T
243 Beiträge seit 2006
vor 17 Jahren

Original von ZeroQool
Sollte eigentlich richtig sein, wie gesagt, wenn ich die ganzen Funktionen in meinem Formular habe klappt alles, nur nicht wenn ich die Funktionen ect. in eine Klasse packe dann gehts nicht.

Ist es aber nicht! FromBase64String erwartet als Parameter einen String, der bereits base64-verschlüsselt ist. Der String "Server=localhost;Database=Northwind;UID=sa;PWD=sa" ist aber nicht verschlüsselt.

Wenn Du diesen String aber verschlüsseln möchtest, musst Du die Methode ToBase64String anwenden...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo ZeroQool,

Sollte eigentlich richtig sein, wie gesagt, wenn ich die ganzen Funktionen in meinem Formular habe klappt alles, nur nicht wenn ich die Funktionen ect. in eine Klasse packe dann gehts nicht.

daran kann es aber nicht liegen, außer du hast falsch gepackt (sprich beim Rüberschieben in die andere Klasse einen Fehler gemacht).

herbivore

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 17 Jahren

Hallo herbivore

daran kann es aber nicht liegen, außer du hast falsch gepackt (sprich beim Rüberschieben in die andere Klasse einen Fehler gemacht).

Daran denke ich kann es auch nicht liegen. Beim Kopieren/bzw verschieben habe ich auch ncihts falsch gemacht. Schon mehrmals überprüfen.