Whirlpool Statt MD5

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
  • Hab da eine kleine Frage,


    ich würde gerne das Whirlpool Verfahren benutzen und kein MD5 Code. Dazu bräuchte ich mal bitte einige Informationen wie genau ich das umsetzen kann.


    Login / Register System basierend auf dem MySQL R39-3 CentOS System und dem Tutorial von Jeffry.


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);

    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256];
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);

    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);


    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);


    //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }



    Vielen Dank im Voraus !

  • Das musst du schon außerhalb des Strings machen.
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password='%e';", PlayerInfo[playerid][pName], buf);

  • Nope, da skippt er die Registrierung mit neuen Benutzern, tut es leider nicht !


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);

    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], inputtext);

    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);


    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = '%e'", PlayerInfo[playerid][pName], inputtext);


    //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }

  • Poste den Code von deinem OnPlayerRequestClass (dort wo du den Dialog anzeigst).


    Zum OnDialogResponse:
    Beim mysql_format musst du ganz hinten "inputtext" mit "buf" ersetzen.


    Der Fehler liegt bei Dir Jeffry ;


    public OnPlayerRequestClass(playerid)
    {
    //Wenn der Spieler die Class-Selection betritt prüfe, ob er bereits eingeloggt ist
    if(!PlayerInfo[playerid][pLoggedIn])
    {
    //Wenn nicht, dann prüfe ob der Spieler ein Konto hat
    //Dazu wird ein Query gesendet und ein neues Callback aufgerufen
    //%e steht für einen geprüften String (sollte anstatt %s in Queries verwendet werden)
    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);

    //Das Query wird abgesendet und die playerid an OnUserCheck übergeben
    mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
    }
    return 1;
    }


    Seit wann fragt man einen Existierenden Spieler an der ID und nicht am Namen ab ?


    Hast du da geschlafen zu dem Zeitpunkt :D


    SQL
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'"


    Besser wäre doch :


    PHP
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e'"


    Oder ?

  • Wenn ich das richtig verstanden habe, dann nicht. Du fragst anhand dieser Query ja nur ab, ob der Spieler bereits ein Account besitzt, dafür muss man ja nicht alle Spalten "selecten", sondern nur eine, da ist ID doch die beste. ;)

  • Nein, das ist kein Fehler. Ich lese nur die ID aus, das reicht um herauszufinden, ob der Spieler eine Zeile hat, man braucht nicht die ganze Zeile zu selektieren.
    Du nutzt ja den WHERE Teil um den Spieler zu finden.


    Der Code passt.
    Schalte mal den Debug Modus an und poste dann was im MySQL Log steht, wenn der Fehler auftritt.

  • Da steht nichts im Debug, zumindest sehe ich keinen Fehler, er Skipped den Usernamen beim Login, ich will mich mit verschidenen Namen einloggen aber er geht immer auf Login und nicht Register ! Hier nochmal der Code !


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    if(!response) return Kick(playerid);
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], buf);
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);


    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    new query[256], buf[256];
    WP_Hash(buf, sizeof (buf),inputtext);
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = '%e'", PlayerInfo[playerid][pName], buf);
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }



    P.S Whirlpool hat mehr als 256 Zeichen wenn man pech hat, eventuell den Query Cache erweitern ?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du hast auch den inputtext nicht zu hash geändert... :whistling:


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);

    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256], hash[256];
    WP_Hash(hash, sizeof (hash),inputtext);
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], hash);

    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);


    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256], hash[256];
    WP_Hash(hash, sizeof (hash),inputtext);
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = '%e'", PlayerInfo[playerid][pName], hash);


    //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }

  • public OnPlayerRequestClass(playerid)
    {
    //Wenn der Spieler die Class-Selection betritt prüfe, ob er bereits eingeloggt ist
    if(!PlayerInfo[playerid][pLoggedIn])
    {
    //Wenn nicht, dann prüfe ob der Spieler ein Konto hat
    //Dazu wird ein Query gesendet und ein neues Callback aufgerufen
    //%e steht für einen geprüften String (sollte anstatt %s in Queries verwendet werden)
    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);

    //Das Query wird abgesendet und die playerid an OnUserCheck übergeben
    mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
    printf("Select Query: %s", query);
    }
    return 1;
    }


    Was steht so im Server Log?


    Poste bitte dein OnUserCheck dazu, und einen Screenshot der Daten aus der Datenbank.



  • Ernsthaft, ich sagte jetzt 5x das keine Registrierung erfolgt, das er diese skipped und du willst nach wie vor Wissen was in der DB steht ?! Na NICHTS ! Was soll bei einem Skip stehen wenn die Login = Nichts ist !? Diese Frage ! Schau dir den Code an den ich mehrmals gepostet habe,

  • Zitat

    Ernsthaft, ich sagte jetzt 5x das keine Registrierung erfolgt, das er diese skipped und du willst nach wie vor Wissen was in der DB steht ?! Na NICHTS ! Was soll bei einem Skip stehen wenn die Login = Nichts ist !? Diese Frage ! Schau dir den Code an den ich mehrmals gepostet habe,


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);

    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");

    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256], hash[256];
    WP_Hash(hash, sizeof (hash),inputtext);
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], hash);

    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);


    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");


    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256], hash[256];
    WP_Hash(hash, sizeof (hash),inputtext);
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = '%e'", PlayerInfo[playerid][pName], hash);


    //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }


    Wie wäre es wenn du meine Beiträge mal lesen tust?

  • Ernsthaft, ich sagte jetzt 5x das keine Registrierung erfolgt, das er diese skipped und du willst nach wie vor Wissen was in der DB steht ?! Na NICHTS ! Was soll bei einem Skip stehen wenn die Login = Nichts ist !? Diese Frage ! Schau dir den Code an den ich mehrmals gepostet habe,


    Wenn man dir helfen soll, dann solltest du nicht so rum meckern. An Jeffrys stelle würde ich dir jetzt nicht mehr helfen, ist ja schlimm.. :pinch:

  • public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    return 1;
    }


    Kommt da nicht eigentlich statt ID der Name rein, da ich keine feste PlayerID vergebe sondern einen namen !