Probleme mit Kodierung



  • Hi!

    Ich habe ein Form, in dem ein String und ein Salt eingegeben werden können. Ausgegeben werden dann aber nur irgendwelche komische Zeichen(w��&����V����x�). Wenn ich mir einen MD5-Hash anschaue, den PHP liefert (1f3870be274f6c49b3e31a0c6728957f) dann sollte das doch eigentlich problemlos in einer Textbox dargestellt werden können, oder?

    Ich vermute mal stark, dass ich da ein Verständnisproblem habe 🙂 Könnt ihr mir sagen was ich falsch mache?

    MD5CryptoServiceProvider md5csp = new MD5CryptoServiceProvider();
    byte[] data = Encoding.UTF8.GetBytes(tb_pwd_input.Text + tb_pwd_salt.Text);
    data = md5csp.ComputeHash(data);
    tb_pwd_output.Text = Encoding.UTF8.GetString(data);
    

    ciao,
    SC



  • Jup, nen kleines Denkproblem hast drin.

    Du hast dein Bytearray und daraus willst du jetzt nen String erstellen. So wie du es macht schnappt er sich immer Doppelbytes und erstellt daraus ein Zeichen (2 Byte Chars) - die Kästchen zeigt er an weil im aktuellen Font kein Zeichen für diesen Code der aus den 2 Bytes erzeugt wurde hinterlegt ist. Aber willst du das? Eher nein. Du willst ja einfach nur die Bytes hexadezimal anzeigen, und nicht aus den Bytes nen String erstellen. Sprich du könntest in ner Schleife einfach das Byte Array durchlaufen, jedes Byte zu einem hexadezimalen String konvertieren und diese Einzelstrings dann zu einen gemeinsamen zusammenfügen.

    Das ganze musst du auch beim einlesen beachten, mit GetBytes erreichst du nicht dass was du willst wenn du direkt hexadezimal in der Textbox was angibst.



  • Hey!

    Vielen Dank für deine Antwort. Leider weiß ich nicht so recht, wie ich das umsetzen muss.

    MD5CryptoServiceProvider md5csp = new MD5CryptoServiceProvider();
    byte[] data = Encoding.UTF8.GetBytes(tb_pwd_input.Text + tb_pwd_salt.Text);
    data = md5csp.ComputeHash(data);
    string s = "";
    for (int i = 0; i < data.GetLength; i++)
    {
        s += ???
    }
    tb_pwd_output.Text = s;
    

    Was muss ich in die for-Schleife reinschreiben? Ich habe schon gegoogelt, nach den benötigten Klassen und Methoden, aber ich habe nichts gefunden. Vorallem an den Methoden haperts. Wenn ich das verstanden habe, dann müsste es auch mit dem richtigen Einlesen klappen, oder?

    Danke schön!

    ciao,
    SC



  • Ich habe den Morgen über nochmal gegoogelt und nach einer Lösung gesucht. Allerdings habe ich keine Lösung gefunden. Ich wäre sehr dankbar über Hilfe.

    Danke schön! SC



  • public string md5hash(string HashStr)
    {
    	string retval="";
    	UTF8Encoding utf8 = new UTF8Encoding();
    
    	byte[] StrInBytes=utf8.GetBytes(HashStr);
    
    	MD5 md5obj = MD5.Create();
    
    	md5obj.Initialize();
    	byte[] md5hash = md5obj.ComputeHash(HashBytes);
    	md5obj.Clear();
    
    	for (int i = 0; i < md5hash.Length; i++)
    	{
    		retval += md5hash[i].ToString("x2");
    	}
    
    	return retval;
    }
    


  • An diesem Punkt wäre es dann übrigens angebracht, statt des Strings einen StringBuilder zu verwenden (und mit der von vornherein bekannten Kapazität zu initialisieren!).


Anmelden zum Antworten