C# Textbox Wert leer wenn in Methode verwendet?

3 Antworten

Moin,

du gibst auch die richtige Textbox an?
Hast du mal über einen Breakpoint geguckt, ob die Daten bei der Übergabe da sind?
Aber ohne Code können wir nicht sagen, woran es liegt.

LG

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting

Was genau meinst du? Verwendest TextBox.Text als Argument für DATA? Und was genau erhoffst du dir? Der Rückgabewert der Funktion wird sicherlich der verschlüsselte Text sein, den musst du halt wieder in die Textbox schreiben

Woher ich das weiß:Studium / Ausbildung – Student der Informatik an der HU Berlin

Ohne Code keine Antwort. Oder sollen wir lieber raten?

Bis dahin ist meine generelle Antwort: Man muss Code aus dem Internet nicht einfach nur kopieren, man muss ihn eben auch verstehen.


MarcelDerAdmin 
Beitragsersteller
 08.06.2020, 15:24
MessageBox.Show(code);
      MySqlConnection connection = new MySqlConnection(conn);
      MySqlCommand cmd = connection.CreateCommand();
      cmd.CommandText = "INSERT INTO messages (localID,localUser,remoteID,remoteUser,message) VALUES ('" + Encrypt(Properties.Settings.Default.localID, code) + "', '"
                                                        + Encrypt(Properties.Settings.Default.localUser, code) + "', '"
                                                        + code + "', '"
                                                        + Encrypt(rUser, code) + "', '"
                                                        + Encrypt(message, code) + "')";

in der Methode wird beim Messagebox.Show 'code' angezeigt als der wert in der Textbox. Ab dem Mysql command mit dem "+ code +" klappt es scheinbar nicht mehr weil er da leer ist.

weshalb ich dann hier den fehler bekomme:

private const int Keysize = 256;
    private const int DerivationIterations = 1000;
    public string Encrypt(string plainText, string passPhrase)
    {
      MessageBox.Show("ENC " + plainText + "\n\n" + passPhrase);
      try
      {
        // Salt and IV is randomly generated each time, but is preprended to encrypted cipher text
        // so that the same Salt and IV values can be used when decrypting.  
        var saltStringBytes = Generate256BitsOfRandomEntropy();
        var ivStringBytes = Generate256BitsOfRandomEntropy();
        var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
        using (var password = new Rfc2898DeriveBytes(passPhrase, saltStringBytes, DerivationIterations))
        {
          var keyBytes = password.GetBytes(Keysize / 8);
          using (var symmetricKey = new RijndaelManaged())
          {
            symmetricKey.BlockSize = 256;
            symmetricKey.Mode = CipherMode.CBC;
            symmetricKey.Padding = PaddingMode.PKCS7;
            using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, ivStringBytes))
            {
              using (var memoryStream = new MemoryStream())
              {
                using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                {
                  cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                  cryptoStream.FlushFinalBlock();
                  // Create the final bytes as a concatenation of the random salt bytes, the random iv bytes and the cipher bytes.
                  var cipherTextBytes = saltStringBytes;
                  cipherTextBytes = cipherTextBytes.Concat(ivStringBytes).ToArray();
                  cipherTextBytes = cipherTextBytes.Concat(memoryStream.ToArray()).ToArray();
                  memoryStream.Close();
                  cryptoStream.Close();
                  return Convert.ToBase64String(cipherTextBytes);
                }
              }
            }
          }
        }
      }
      catch (Exception ex)
      {
        Clipboard.SetText(ex.Message);
        MessageBox.Show("Message not sent due encryption error.\n\n" + ex.Message, "Anoca - Encryption error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return "ENC ERROR";
      }
    }
0
ohwehohach  08.06.2020, 15:27
@MarcelDerAdmin

Was steht denn in "Properties.Settings.Default.localID" bei Dir in der Konfiguration drin? Das ist ja der Text, der verschlüsselt werden soll. Und wenn in code vorher was drinstand, dann muss das ja bei einem Breakpoint in der Methode Encrypt im Wert passPhrase ebenfalls drinstehen.

2
MarcelDerAdmin 
Beitragsersteller
 08.06.2020, 15:32
@ohwehohach

localID ist ein generierter String der beim ersten Start meines Programmes erstellt wird. Es ist ein anonymes Chat Programm.

passPhrase wird auch angezeigt in der MessageBox, nur der Dritte wert ist leer vom plainText

0
ohwehohach  08.06.2020, 15:38
@MarcelDerAdmin

Dann steht in rUser nichts drin, denn das ist der 3. Aufruf von Encrypt und im plainText steht ja rUser.

1
MarcelDerAdmin 
Beitragsersteller
 08.06.2020, 15:40
@ohwehohach

Genau das ist das Problem was ich gerade beheben wollte. Ich hab das nämlich falsch durchdacht und die drei Werte nachgesehen, aber rUser war der dritte Wert für Encrypt, nicht code.

Deshalb hab ich einen null Check gemacht und dass wenn rUser (=remote user) null ist auf "Unknown" gesetzt, weshalb es jetzt klappt.

1