Passwort hashen

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
  • Hallo,
    ich habe mein Login/Register System am Anfang geschrieben als ich angefangen habe zu scripten und deswegen sind meine Passwörter momentan auch nur mit UDB_Hash gehasht, da mir aber nun aufgefallen ist dass dies sehr unsicher ist würde ich gerne die SHA256 Funktion von SAMP dafür nutzen, wie kann ich das in meinem Script einbauen?


    Ich benutze SQLite.


    Mein momentaner Code:

    if(dialogid == DIALOG_REGISTER)
    {
    if(response)
    {
    if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration","{FFFFFF}Gebe dein Passwort ein um dich zu registrieren:","Registrieren","Verlassen");



    new HashPass[140];
    format(HashPass, sizeof(HashPass), "%d", udb_hash(inputtext));



    new query[356];
    //ac
    format(query, sizeof(query), "INSERT INTO Players (Name, Password, Level, ForceAC, Kills, Deaths, Score, VIP, MaxRoundKills, MaxRoundDamage, Headshots, Tbags, PunchK, DeagleK, ShotgunK, SpasK, MP5K, AK47K, M4K, RifleK, SniperK, GrenadeK, Gun2, Gun3, Gun4, Gun5, Gun6) VALUES('%s', '%s', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 33, 0)", DB_Escape(Player[playerid][Name]), HashPass);
    db_free_result(db_query(sqliteconnection, query));



    format(HashPass, sizeof(HashPass), "Du hast dich erfolgreich registriert. Passwort: {55FF55}%s", inputtext);
    SendClientMessage(playerid, YELLOW_COLOR, HashPass);
    SendClientMessage(playerid, YELLOW_COLOR, "Nutze {FFFFFF}/cmds {FFFF00}für die Commands und {FFFFFF}/updates {FFFF00}um über die letzten Updates bescheid zu wissen.");
    SendClientMessage(playerid, YELLOW_COLOR, "Vergesse nicht mit {FFFFFF}/rules {FFFF00}die Regeln durchzulesen.");
    .....
    .....

  • [wiki]http://wiki.sa-mp.com/wiki/SHA256_PassHash[/wiki]


    Das Passwort wird hier gehashed:

    Code
    new HashPass[140];
    format(HashPass, sizeof(HashPass), "%d", udb_hash(inputtext));

    Alles Weitere kannste dir dann denke ich ableiten.

    Vielleicht ne blöde Frage aber;
    ist das so richtig, oder wie soll ich sonst den eingegeben Text hashen?

    if(dialogid == DIALOG_REGISTER)
    {
    if(response)
    {
    if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration","{FFFFFF}Gebe dein Passwort ein um dich zu registrieren:","Registrieren","Verlassen");



    new HashPass[64 + 1];
    SHA256_PassHash("inputtext", "ewvgYIpHsX6ckTDlCwiAI7VOyJvt2bqiJPg8gNeYeEAWy7ujFIVMkkDG4fWmGKIP", HashPass, sizeof HashPass);



    new query[356];
    //ac
    format(query, sizeof(query), "INSERT INTO Players (Name, Password, Level, ForceAC, Kills, Deaths, Score, VIP, MaxRoundKills, MaxRoundDamage, Headshots, Tbags, PunchK, DeagleK, ShotgunK, SpasK, MP5K, AK47K, M4K, RifleK, SniperK, GrenadeK, Gun2, Gun3, Gun4, Gun5, Gun6) VALUES('%s', '%s', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 33, 0)", DB_Escape(Player[playerid][Name]), HashPass);
    db_free_result(db_query(sqliteconnection, query));



    format(HashPass, sizeof(HashPass), "Du hast dich erfolgreich registriert. Passwort: {55FF55}%s", inputtext);
    SendClientMessage(playerid, YELLOW_COLOR, HashPass);
    SendClientMessage(playerid, YELLOW_COLOR, "Nutze {FFFFFF}/cmds {FFFF00}für die Commands und {FFFFFF}/updates {FFFF00}um über die letzten Updates bescheid zu wissen.");
    SendClientMessage(playerid, YELLOW_COLOR, "Vergesse nicht mit {FFFFFF}/rules {FFFF00}die Regeln durchzulesen.");

  • Der erste Parameter muss schon der Input dann sein und kein String Literal. :P
    SHA256_PassHash(inputtext, "ewvgYIpHsX6ckTDlCwiAI7VOyJvt2bqiJPg8gNeYeEAWy7ujFIVMkkDG4fWmGKIP", HashPass, sizeof HashPass);

  • Ah ok danke,
    ist das dann bei meiner Login Anfrage so richtig?

    if(dialogid == DIALOG_LOGIN)
    {
    if(response)
    {
    if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"{FFFFFF}Login","{FFFFFF}Gebe dein Passwort ein um dich einzuloggen:","Einloggen","Verlassen");



    new HashPass[64 + 1];
    SHA256_PassHash(inputtext, "eWvgYIpHsX6ckTDlCwiAI7VOyJvt2bqiJpg8gNeYeEAWy7ujFIVMkkdG4fWmGkIP", HashPass, sizeof HashPass);



    new Query[256];
    format(Query, sizeof(Query), "SELECT * FROM `Players` WHERE `Name` = '%s' AND `Password` = '%s'", DB_Escape(Player[playerid][Name]), HashPass);
    new DBResult:res = db_query(sqliteconnection, Query);

  • SQL
    [join] LeonMrBonnie has joined the server (0:127.0.0.1)
    [Warning] db_query: Query failed: near ",": syntax error
    [Error] db_free_result(): invalid result handle 0

    Den Error kriege ich.


    Der Code:

    if(dialogid == DIALOG_REGISTER)
    {
    if(response)
    {
    if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration","{FFFFFF}Gebe dein Passwort ein um dich zu registrieren:","Registrieren","Verlassen");



    new HashPass[64 + 1];
    SHA256_PassHash(inputtext, "eWvgYIpHsX6ckTDlCwiAI7VOyJvt2bqiJpg8gNeYeEAWy7ujFIVMkkdG4fWmGkIP", HashPass, sizeof HashPass);



    new query[356];
    //ac
    format(query, sizeof(query), "INSERT INTO Players (Name, Password, Level, ForceAC, Kills, Deaths, Score, VIP, MaxRoundKills, MaxRoundDamage, Headshots, Tbags, PunchK, DeagleK, ShotgunK, SpasK, MP5K, AK47K, M4K, RifleK, SniperK, GrenadeK, Gun2, Gun3, Gun4, Gun5, Gun6) VALUES('%s', '%s', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 33, 0)", DB_Escape(Player[playerid][Name]), HashPass);
    db_free_result(db_query(sqliteconnection, query));



    format(HashPass, sizeof(HashPass), "Du hast dich erfolgreich registriert. Passwort: {55FF55}%s", inputtext);
    SendClientMessage(playerid, YELLOW_COLOR, HashPass);
    SendClientMessage(playerid, YELLOW_COLOR, "Nutze {FFFFFF}/cmds {FFFF00}für die Commands und {FFFFFF}/updates {FFFF00}um über die letzten Updates bescheid zu wissen.");
    SendClientMessage(playerid, YELLOW_COLOR, "Vergesse nicht mit {FFFFFF}/rules {FFFF00}die Regeln durchzulesen.");