MVD-Script - Passwörter verschlüsseln?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Abend,


    ich habe mir eben das My Virtual Dream Script ([Veröff.]My Virtual Dream) heruntergeladen wo die Passwörter leider nicht verschlüsselt werden.
    Das ganze wollte ich mit MD5 machen, da das UCP auch damit arbeitet.


    Das ganze habe ich beim Register Dialog folgendermaßen gelöst:
    if(dialogid == DIALOG_REG)
    {
    if(response)
    {
    if(response && strlen(inputtext) > 0)
    {
    new query[265], playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername, sizeof(playername));
    format(query, sizeof(query), "INSERT INTO `accounts` (name,passwort) VALUES ('%s',MD5('%s'))", playername, inputtext);
    mysql_query(query);
    format(query, sizeof(query), "INSERT INTO `PhoneContact` (name) VALUES ('%s')", playername);
    mysql_query(query);
    gPlayerLogged[playerid] = 1;
    SaveMysqlPlayer(playerid);
    //WBB_AddUser(playername,"emailstring",inputtext,1); // NAME | EMAIL | PASSWORT
    //WBB_SetUserToGroup(playername,3); // NAME | RankID
    //WBB_EnableUser(playername); // NAME
    ShowUserDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Bitte logge dich in deinen Account ein!","Login","Abbrechen");
    }
    else
    {
    ShowUserDialog(playerid,DIALOG_REG,DIALOG_STYLE_PASSWORD,"Account erstellen","Gib das Passwort für deinen Account ein:","OK","Abbrechen");
    }
    if(response == 0)
    {
    Kick(playerid);
    }
    }
    if(response == 0)
    {
    SelectTextDraw(playerid, 0x33CCFFAA);
    }
    }


    Das ganze funktioniert auch und die Passwörter werden verschlüsselt.


    Das Problem ist der Login.
    if(dialogid == DIALOG_LOGIN)
    {
    if(response && strlen(inputtext) > 0)
    {
    new string[512],name[32];
    GetPlayerName(playerid,SpielerInfo[playerid][Name],32);
    mysql_real_escape_string(SpielerInfo[playerid][Name],name);
    format(string,sizeof(string),"SELECT passwort FROM accounts WHERE name = '%s'",name);
    mysql_query(string);
    mysql_store_result();
    mysql_fetch_row(string);
    mysql_free_result();
    if(strcmp(inputtext,string,false)!=0)
    {
    format(string,sizeof(string),"Willkommen bei %s\n\nDein Passwort war nicht richtig!\nBitte Logge dich mit \ndein richtiges Passwort ein.",SERVERNAME);
    ShowUserDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login",string,"Einloggen","Abbrechen");
    return 1;
    }
    format(string, sizeof(string), "SELECT * FROM `accounts` WHERE `name`='%s'",name);
    mysql_query(string);
    mysql_store_result();
    mysql_fetch_row(string);
    mysql_free_result();
    printf("Spieler %s wird geladen", SpielerInfo[playerid][Name]);
    for(new i=0;i<166;i++)


    Ich habe es bereits so versucht:
    aus:


    format(string,sizeof(string),"SELECT passwort FROM accounts WHERE name = '%s'",name);



    wurde z. B.:
    format(string,sizeof(string),"SELECT * FROM accounts WHERE name = '%s' AND passwort = MD5('%s')",name, inputtext);


    Bei dem einen Versuch funktioniert weder das normale Passwort noch das verschlüsselte.
    Bei der anderen konnte man das verschlüsselte Passwort eingeben und es funktionierte. Bei dem normalen Passwort aber nicht.


    Ich weiß nicht wie ich das sonst machen soll, kann mir vielleicht jemand helfen?


    Viele Grüße & Vielen Dank im Voraus!

  • Schon mal daran gedacht, das in deinem Skript nach dem laden der Spielerdaten das Passwort nochmal geprüft wird ? (Das solltest du entfernen)

    Habe gerade nochmal beim Login geschaut und leider nicht gefunden was du meinst?

  • Wenn ich folgendes entferne:


    if(strcmp(inputtext,string,false)!=0)
    {
    format(string,sizeof(string),"Willkommen bei %s\n\nDein Passwort war nicht richtig!\nBitte Logge dich mit \ndein richtiges Passwort ein.",SERVERNAME);
    ShowUserDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login",string,"Einloggen","Abbrechen");
    return 1;
    }


    Dann kann man sich mit jedem Passwort einloggen, egal was man eingibt.

  • Also wenn ich das richtig verstehe statt



    [list=1][*]if(strcmp(inputtext,string,false)!=0)
    [*]{
    [*]format(string,sizeof(string),"Willkommen bei %s\n\nDein Passwort war nicht richtig!\nBitte Logge dich mit \ndein richtiges Passwort ein.",SERVERNAME);
    [*]ShowUserDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login",string,"Einloggen","Abbrechen");
    [*]return 1;
    [*]}
    [/list]


    einfach



    [list=1][*]format(string,sizeof(string),"SELECT * FROM accounts WHERE name = '%s' AND passwort = MD5('%s')",name, inputtext);
    [*]{
    [*]format(string,sizeof(string),"Willkommen bei %s\n\nDein Passwort war nicht richtig!\nBitte Logge dich mit \ndein richtiges Passwort ein.",SERVERNAME);
    [*]ShowUserDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login",string,"Einloggen","Abbrechen");
    [*]return 1;
    [*]}
    [/list]


    oder wie is das gemeint?

  • Nee aber so - du musst jedoch noch die eingabe escapen


  • Erstmal schon mal Danke für deine Hilfe.


    Ich hab das jetzt so eingefügt aber jetzt kommt immer das Passwort ist falsch.
    Egal ob es das falsche ist oder das richtige.

  • Du scheinst noch irgendwo zu überprüfen ob das eingegebene Passwort dem der Datenbank gleicht.
    Aber das kannst du dir Sparen wenn du den Datensatz schon gefunden hast.


    Such mal ob du ähnliches findest.
    if(EingegebenesPasswort == PasswortAufDerDatenBank)


    Den dieses überprüfung ist nicht nötig. Diese könnte auch nur erfolgreich sein wenn du das EingegebenePasswort auch in MD5 Codierst.