mercredi 2 septembre 2015

[Ajuda] WP_Hash/mySQL Password Problem

Ola, en tenho um problema aqui num sistema de password hashing

Eu em primeiro tinha um problema en que o hashing nao apparecia no mySQL, e ja esta resolvido, mas agora, eu posso entrar com qualquer password, se o password for 4321 eu posso entrar com 1234

Eu nao vejo qual é o problema, e tambem meti um print no CheckUser, para meter a password na console, e mostra-me o Hashing (FEDFD5S0DG3D13GD1) e nao a password

Aqui esta o meu codigo

Code:

// Includes 

#include <a_samp> 
#include <a_mysql> 

// Native WP_Hash em cima

native WP_Hash(buffer[], len, const str[]);   

// mysql defines 

#define mysql_host "localhost" 
#define mysql_user "root" 
#define mysql_password "" 
#define mysql_database "sfrp" 

// Dialogs defines 

#define RegDialog 0 
#define LoginDialog 1 

// playerdata 

enum playerInfo 

    Password[129], 
    skin, 
    db_id 

new pInfo[MAX_PLAYERS][playerInfo]; 

// forwards 

forward CheckUser(playerid); 
forward CheckPassword(playerid); 

// mysql variable 

new dbhandle; 

// OnGameModeInit 

    dbhandle = mysql_connect(mysql_host, mysql_user, mysql_database, mysql_password); 
    if(mysql_errno() != 0) 
    { 
        printf("[MySQL] Failed to connect."); 
    } 
    else 
    { 
        printf("[MySQL] Succesfully connected."); 
    } 

// OnGameModeExit 

    mysql_close(dbhandle); 

// OnPlayerConnect 

    new query[128]; 
    mysql_format(dbhandle, query, sizeof(query), "SELECT `Password`, `ID` FROM `users` WHERE `Username` = '%e' LIMIT 1", PlayerName(playerid));
    mysql_tquery(dbhandle, query, "CheckUser", "i", playerid); 

// OnPlayerDisconnect 
// SavePlayerStats 

    SavePlayerStats(playerid); 
    ResetPlayerStats(playerid); 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    /*************** 
      Login Dialog 
    ****************/ 
    if(dialogid == LoginDialog) 
    { 
        if(response) 
        {     
            if (strlen(inputtext) > 0) 
              {     
                  new hashpass[129], query[128]; 
                  WP_Hash(hashpass, sizeof(hashpass), inputtext); 
                if(!strcmp(hashpass,  pInfo[playerid][Password])) 
                { 
                    mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM `users` WHERE `Username` = '%e' LIMIT 1", PlayerName(playerid)); 
                    mysql_tquery(dbhandle, query, "CheckPassword", "i", playerid); 
                } 
            } 
            else 
            { 
                new string[159 + MAX_PLAYER_NAME]; 
                format(string, sizeof(string),"Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {00FF00}Registered.\n\n{FF0000}You must type the password related to this account to login.", PlayerName(playerid)); 
                ShowPlayerDialog(playerid, LoginDialog, DIALOG_STYLE_PASSWORD, "{00FF00}Account found - Logging in...", string, "Login", "Cancel"); 
            } 
        } 
        else 
        { 
            Kick(playerid); 
        } 
        return 1; 
    } 

    /*************** 
    Register Dialog 
    ****************/ 
    if(dialogid == RegDialog) 
    { 
        if(response) 
        { 
            if (strlen(inputtext) > 0) 
            { 
                new query[200]; 
                WP_Hash(pInfo[playerid][Password], 129, inputtext); 
                mysql_format(dbhandle, query, sizeof(query), "INSERT INTO `users` (`Username`, `Password`) VALUES ('%e', '%e')", PlayerName(playerid), pInfo[playerid][Password]); 
                mysql_tquery(dbhandle, query, "", ""); 
            } 
            else 
            { 
                new string[145 + MAX_PLAYER_NAME]; 
                format(string, sizeof(string), "Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {FF0000}Unregistered.\n\nYou must create a password below to register this account.", PlayerName(playerid)); 
                ShowPlayerDialog(playerid, RegDialog, DIALOG_STYLE_INPUT, "{FF0000}Account not found - Registering...", string, "Register", "Cancel"); 
            }         
        } 
        else 
        { 
            Kick(playerid); 
        } 
        return 1; 
    } 
    return 1; 


// Functions 

SavePlayerStats(playerid) 

    new query[128]; 
    mysql_format(dbhandle, query, sizeof(query), "UPDATE `users` SET `Skin` = %i WHERE `ID` = %i", GetPlayerSkin(playerid), pInfo[playerid][db_id]); 
    mysql_tquery(dbhandle, query, "", ""); 
    return 1; 


ResetPlayerStats(playerid) 

    for (new i=0; i< sizeof(pInfo[]); i++) 
    { 
        pInfo[playerid][playerInfo:i] = 0; 
    } 
    return 1; 


// Callbacks 

public CheckUser(playerid) 

    new rows, fields; 
    cache_get_data(rows, fields, dbhandle); 
    if (rows == 0) 
    { 
        new string[152 + MAX_PLAYER_NAME]; 
        format(string, sizeof(string), "Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {FF0000}Unregistered.\n\n{9AB3D0}Create a password below to register this account.", PlayerName(playerid)); 
        ShowPlayerDialog(playerid, RegDialog, DIALOG_STYLE_INPUT, "{FF0000}Account not found - Registering...", string, "Register", "Cancel"); 
    } 
    else 
    { 
        new string[152 + MAX_PLAYER_NAME]; 
        cache_get_field_content(0, "Password", pInfo[playerid][Password], dbhandle, 129); 
        pInfo[playerid][db_id] = cache_get_field_content_int(0, "ID");
        printf("%s", pInfo[playerid][Password]);
        format(string, sizeof(string), "Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {00FF00}Registered.\n\n{9AB3D0}Type the password related to this account to login.", PlayerName(playerid)); 
        ShowPlayerDialog(playerid, LoginDialog, DIALOG_STYLE_PASSWORD, "{00FF00}Account found - Logging in...", string, "Login", "Cancel"); 
    } 
    return 1; 


public CheckPassword(playerid) 

    pInfo[playerid][skin] = cache_get_field_content_int(0, "Skin"); 
    return 1; 
}


Espero que me possam ajudar :)


Aucun commentaire:

Enregistrer un commentaire