Verschlüsselung



  • Guten Tag

    Ich möchte die Werte und ein Passwort, welche in einem Editfeld eingegeben werden verschlüsselt in einer MySQL Datenbank ablegen.

    Ich habe da schon was von md5 gehört, aber das war damals bei PHP..

    Bei googel habe ich leider nicht viel hilfreiches gefunden mit Verschlüsselungen bei Borland..

    Könnt ihr mir einmal die verschiedenen Möglichkeiten aufzeigen und evtl die Vor- und Nachteile. Muss sicher nicht die komplizierteste sein, aber sicher sollte die schon sein..

    Besten Dank



  • md5 ist keine Verschlüsselung, sondern ein Hashverfahren

    Könnt ihr mir einmal die verschiedenen Möglichkeiten aufzeigen und evtl die Vor- und Nachteile. Muss sicher nicht die komplizierteste sein, aber sicher sollte die schon sein..

    Da könnte Wikipedia weiterhelfen und auch google nach "rot13"



  • Hallo

    in MySQL gibt es bereits eine einfache Funktion md5.

    bis bald
    akari



  • Also für Passwörter abspeichern würde ich Hash-Werte (md5 usw.) nehmen dabei brauchst du nicht wissen wie die erzeugt werden das macht MySql für dich schau mal hier

    http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html



  • Wenn er die Passwörter verschlüsselt abspeichern will (so die Anforderung), nützt MD5 nichts.

    MD5 ist ein Hashverfahren. Bei diesem wird über das Passwort eine Prüfsumme erzeugt. Diese kann gespeichert werden. Gibt nun jemand ein Passwort ein, so kann dann auch wieder eine Prüfsumme errechnet werden. Stimmen die dann überein, so wird wohl das Passwort ok sein. Man kann aber nicht - und dass ist der entscheidene Unterschied - aus der Prüfsummer das Passwort ermitteln.

    Im Gegensatz zu einer Verschlüsselung - wie auch immer - wird das Passwort verschlüsselt und gespeichert. Gibt jemand ein Passwort ein, kann man es entschlüsseln und dann vergleichen. Man kann aus dem Verschlüsseltem das Originalpasswort ermitteln



  • Hallo

    Höchstwahrscheinlich meint simons mit Verschlüsseln genau das was Hashes bieten.

    bis bald
    akari



  • ich denke christian hat es so verstanden wie ich es meinte..

    ich will einfach int werte und das pw verschlüsselt in der db ablegen und anschliessen entschlüsselt in dem programm ausgeben.

    so wie ich das nun verstanden habe muss ich mich nach ROT13 umschauen? Hat jemand gerade eine gute Seite für Borland? Das was ich gefunden habe ist nicht wirklich für den Borland C++ Builder geeignet..



  • Hallo

    hier sind zum Beispiel Prinzip und Implementationen für ROT13 zu finden.

    Aber bedenke das ROT13 eine wirklich sehr einfacher Kodierung ist.
    Und ob du wirklich ein symmetrisches Verfahren willst.

    bis bald
    akari



  • Hallo,

    Hier findet man nützliche Komponenten zur Verschlüsselung und Hashbildung
    http://www.cityinthesky.co.uk/cryptography.html



  • besten dank erstmal. habe mir das mal ein bisschen angeschaut.

    bin nun auf folgendes resultat mit root 47 gekommen:

    for(stringstelle = 1; stringstelle < enter_len; stringstelle++)
         {
         // Wenn der Ascii-Wert kleiner als 80 ist + 47 zählen
         if(text[stringstelle] < 80)
           {
           // Alter String in einen neuen schreiben
           newtext[stringstelle] = text[stringstelle] + 47;
           }
         else
           {
           // Wenn der Wert nun grösser als 126 ist, eifach differenz Wert von 33 erhöhen
           newtext[stringstelle] = 33 + (-127 + text[stringstelle] + 47);
           }
         }
    

    nun zu meiner frage. wie kann ich diesen teil text[stringstelle] in einen int wandeln? sprich einfach sting in ascii-dezimal..



  • Hallo

    bin nun auf folgendes resultat mit root 47 gekommen:

    Das soll wohl eher ROT 47 heißen, für Rotation.

    wie kann ich diesen teil text[stringstelle] in einen int wandeln?

    int ascii = text[stringstelle];
    

    bis bald
    akari



  • besten dank. das funktioniert erstmal.ja wollte eigentlich rot47 schreiben..

    // Stringstellen (ASCII Dezimal) um 47 erhöhen
      for(stringstelle = 1; stringstelle < enter_len; stringstelle++)
         {
         // Wenn der Ascii-Wert kleiner als 80 ist + 47 zählen
         if(text[stringstelle] < 80)
           {
           // Alter String in einen neuen schreiben
           ascii = text[stringstelle];
           newtext[stringstelle] = ascii + 47;
           }
         else
           {
           // Wenn der Wert nun grösser als 126 ist, eifach differenz Wert von 33 erhöhen
           ascii = text[stringstelle];
           newtext[stringstelle] = 33 + (-127 + ascii + 47);
           }
         }
    

    Wie kann ich nun den Int-Wert in einen ASCII-Wert wandeln? IntToStr()geht ja mal logischerweise nicht.. Eine Funktion um Int to ASCII zu wandeln, habe ich irgendwie auch nicht gefunden. Gibt es da eine Möglichkeit?



  • Hallo

    😕
    Was ist für dich den ein "ASCII-Wert"? Doch wohl offensichtlich eine ganze Zahl. Und Zahlen werden in ints gespeichert. Also brauchst du keine Umwandlung von int nach "ASCII"

    bis bald
    akari



  • naja ich will ja dann den Int-Wert in einen String wandeln. Sprich nach der ASCII-Tabelle gäbe ja dann 90 -> Z

    habe mich wohl falsch ausgedrückt.

    sprich ascii + 47 geben einen wert zusammen. eben z.b 90 und nun muss ich irgendwie aus 90 den String Z rausbekommen.

    newtext[stringstelle] = ascii + 47;

    hoffe ist nun verständlich genug geschrieben.



  • Hallo

    newtext[stringstelle] = ascii + 47;
    

    und was hindert dich, genau das einmal auszuprobieren?

    bis bald
    akari



  • akari schrieb:

    Hallo

    newtext[stringstelle] = ascii + 47;
    

    und was hindert dich, genau das einmal auszuprobieren?

    bis bald
    akari

    hm, da kommt bei mir eine Fehlermeldung.. Exception in der Klasse ERangeError.. Meldung: ". Prozess wurde angehalten....



  • Hallo

    das ist also ein Laufzeit-Fehler.
    Und die besagt das dein stringstelle außerhalb des gültigen Bereichs ist, der von 1 bis newtext.Length() geht. Also setzte deinen Debugger ein und finde den Grund dafür.
    Mit der Umwandlung an sich hat das nichts zu tun.

    bis bald
    akari



  • String Tfrmmain::func_readstring(String text, int rotart)
    {
    unsigned int stringstelle;
    unsigned int string_len;
    unsigned int ascii;
    String newtext;
    
    string_len = text.Length();
    
    if(rotart == 47)
      {
      // Stringstellen (ASCII Dezimal) um 47 erhöhen
      for(stringstelle = 1; stringstelle < string_len; stringstelle++)
         {
         // Wenn der Ascii-Wert kleiner als 80 ist + 47 zählen
         if(text[stringstelle] < 80)
           {
           // Alter String in einen neuen schreiben
           ascii = text[stringstelle];
           newtext[stringstelle] = ascii + 47;
           }
         else
           {
           // Wenn der Wert nun grösser als 126 ist, eifach differenz Wert von 33 erhöhen
           ascii = text[stringstelle];
           newtext[stringstelle] = 33 + (-127 + ascii + 47);
           }
         }
      }
    else if(rotart == 5)
      {
      //
      }
    }
    

    das ist mal mein Code. Also sobald ich das:
    newtext[stringstelle] = ascii + 47;
    durch dieses hier
    text[stringstelle] = ascii + 47;
    ersetze dann funktionier das ganze..

    Wie kann den das sein? newtext ist ein String und text ist auch ein String.. Sehe den Fehler oder das Problem überhaupt nicht..



  • Hallo

    ja beide sind vom Typ String. Aber im Gegensatz zu text ist newtext leer. Das heißt die Länge von newtext ist 0.
    Am einfachsten ist es wenn du am Anfang einfach den Inhalt und damit auch die Länge kopierst.

    String newtext = text;
    

    bis bald
    akari



  • ok besten dank. funktioniert nun bestens so.

    für andere: hatte noch ein fehler in der for-Anweisung

    for(stringstelle = 1; stringstelle < string_len + 1; stringstelle++)
    

Log in to reply