Problem with strcmp
#1

i am using whirlpool to hass passes and everything is fine(even it saves the hassed pass in .ini) but now problem comes with login stuff, even if players input incorrect pass, he still logs in but he dosent get the stats, here is what i am using.

update : he gets the stats if he insert correct pass

pawn Код:
enum pInfo
{
    Pass[129]
}
new PlayerInfo[MAX_PLAYERS][pInfo];




public loadaccount_user(playerid, name[], value[])
{
    INI_String("Password", PlayerInfo[playerid][Pass],129);
    return 1;
}

//on dialog response

if(dialogid == DIALOG_LOGIN)
        {
            if(!response) return Kick(playerid); //
            if(response) //
            {//
                new hashpass[129]; //
                WP_Hash(hashpass,sizeof(hashpass),inputtext);
                if(!strcmp(hashpass,PlayerInfo[playerid][Pass]))
                {//then
                    INI_ParseFile(UserPath(playerid),"loadaccount_%s",.bExtra = true, .extra = playerid);
                    SetPlayerScore(playerid,PlayerInfo[playerid][Score]);//
                    GivePlayerMoney(playerid,PlayerInfo[playerid][Cash]);
                    SendClientMessage(playerid,-1,"Welcome back! You have successfully logged in");//
                 
                }
                else //
                {//
                    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Welcome back. This account is registered. \nInsert your password to login to your account.\nIncorrect password!","Login","Quit");//We will tell to them that they've entered an incorrect password
                    return 1;
                }
            }
            return 1;
        }
Reply
#2

Use this hashing stock function.

Код:
/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}
for login do this.
Код:
if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
                    ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"You have successfully logged in!","Ok","");
                }
Reply
#3

well mate there is a slight error with this.

if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
Reply
#4

No errors mate I have tried it myself.
Reply
#5

Try it.
Код:
if(dialogid == DIALOG_LOGIN)
        {
            if(!response) return Kick(playerid); //
            if(response) //
            {//
                new hashpass[129]; //
                WP_Hash(hashpass,sizeof(hashpass),inputtext); 
                if(hashpass==PlayerInfo[playerid][Pass]) //try out this
                {//then
                    INI_ParseFile(UserPath(playerid),"loadaccount_%s",.bExtra = true, .extra = playerid);
                    SetPlayerScore(playerid,PlayerInfo[playerid][Score]);//
                    GivePlayerMoney(playerid,PlayerInfo[playerid][Cash]);
                    SendClientMessage(playerid,-1,"Welcome back! You have successfully logged in");//
                 
                }
                else //
                {//
                    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Welcome back. This account is registered. \nInsert your password to login to your account.\nIncorrect password!","Login","Quit");//We will tell to them that they've entered an incorrect password
                    return 1;
                }
            }
            return 1;
        }
Reply
#6

if(hashpass==PlayerInfo[playerid][Pass])

this code wont work.
Reply
#7

udb hash is a ridiculous hash, you should NOT use that hash because it's barely secure. You should consider using Whirlpool like you were doing before, the above poster have no idea about secure hash so don't follow him. Can you show some more of your code related to loading of accounts?
Reply
#8

Try changing:
pawn Код:
if(!strcmp(hashpass,PlayerInfo[playerid][Pass]))

To:
pawn Код:
if(strcmp(hashpass, PlayerInfo[playerid][Pass], true) == 0)
Reply
#9

fixed needed to change

loadaccount_%s
to
loadaccount_user
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)