GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Bayshore le 20 Mai 2008, 20:48:12

Titre: Comment hashé un string en md5 ?
Posté par: Bayshore le 20 Mai 2008, 20:48:12
Bonsoir,

vu que DeAmx existe et que je ne veut pas que quiconque sache les pass de mes membres, j'aimerais savoir comment crypté un apss de manière à ce qu'il soit undécryptable; :)
Quelqu'un le faisait mais je ne sais plus qui. :(

Meric d'avance de votre aide,
Alexandre.
Titre: Re : Comment hashé un string en md5 ?
Posté par: feldbrau le 20 Mai 2008, 22:46:20
Les pass de tes membres ne sont pas dans ton script normalement, donc meme avec DeAMX il peut pas retrouver les mot de passe. Sinon, Godfather a un systeme de cryptage intégré lors de l'inscription.
Titre: Re : Comment hashé un string en md5 ?
Posté par: inbox le 20 Mai 2008, 22:55:53
Salut,

Voici un exmple

if (!dini_Exists(udb_encode(playername))) {
dini_Create(udb_encode(playername));
dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));

Le script entier
if(strcmp(cmd, "/reg", true) == 0) {
    tmp = dini_Get(FILE_SETTINGS, "register");
if (strval(tmp) == 0) {
    SendClientMessage(playerid, COLOR_RED, "* l'enregistrement au serveur n'est plus possible.");
    return 1;
}
tmp = dini_Get(FILE_SETTINGS, "maxusers");
tmp2 = dini_Get(FILE_TOTALSTAT, "users");
if (strval(tmp2) >= strval(tmp)) {
    SendClientMessage(playerid, COLOR_RED, "* La limite d'utilisateur est au maximum (enregistrement impossible).");
    return 1;
}

    tmp = strtok(cmdtext, idx);

  GetPlayerName(playerid, playername, sizeof(playername));

        if(20 < strlen(tmp) || strlen(tmp) < 5) {
SendClientMessage(playerid, COLOR_YELLOW, "* Tapez un mot de passe de 5 a 20 caractères.");
return 1;
}

    if(!strlen(tmp))
SendClientMessage(playerid, COLOR_WHITE, "* USAGE: /reg [Passe]");

else {
if (!dini_Exists(udb_encode(playername))) {
dini_Create(udb_encode(playername));
dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));
tmp2 = dini_Get(FILE_SETTINGS, "defaultprotection");
dini_IntSet(udb_encode(playername), "protection", strval(tmp2));
dini_Set(udb_encode(playername), "x", "x");
    dini_Set(udb_encode(playername), "y", "y");
    dini_Set(udb_encode(playername), "z", "z");
    dini_Set(udb_encode(playername), "level", "0");
                if (!dini_Exists(FILE_TOTALSTAT)) dini_Create(FILE_TOTALSTAT);
                tmp2 = dini_Get(FILE_TOTALSTAT, "users");
dini_IntSet(FILE_TOTALSTAT, "users", strval(tmp2)+1);
format(string, sizeof(string), "--- %s (id: %d) Compte crée. Mot de passe: %s.", playername, playerid, tmp);
printf(string);
format(string, sizeof(string), "* Compte [%s] Crée Le mot de passe est: [%s]", playername, tmp);
                tmp = dini_Get(FILE_TOTALSTAT, "joueurs");
            dini_IntSet(FILE_TOTALSTAT, "joueurs", strval(tmp)+1);
SendClientMessage(playerid, COLOR_GREEN, string);
}
else {
format(string, sizeof(string), "Le Compte %s existe déjà.", playername,tmp);
SendClientMessage(playerid, COLOR_RED, string);
}
}

return 1;
}

a toi de tout modifier a ta façon pour qui soit compatible avec ton system de Membre

Cordialement,
Titre: Re : Comment hashé un string en md5 ?
Posté par: Samumu le 20 Mai 2008, 23:12:34
Bonsoir :)

Tu veux nécéssairement encrypter en md5? Tout dépend du niveau de cryptage que tu exiges.
Personnellement, je programmes, mais pas en pawn, et tout ce que je sais, c'est que gérer le md5 en pawn n'était pas nativement possible.
Alors, peut être qu'un encryptage sur la base d'un XOR avec une clef (string), ça suffirait (comme je le dis, ça dépend du niveau de sécurité que tu attends).
Et je pense que c'est plus facilement gérable en pawn que le md5 (après, ça n'est pas un langage que je connais).

C'est juste une suggestion, bonne soirée ;)
Titre: Re : Re : Comment hashé un string en md5 ?
Posté par: Bayshore le 20 Mai 2008, 23:17:26
Re,

Les pass de tes membres ne sont pas dans ton script normalement, donc meme avec DeAMX il peut pas retrouver les mot de passe. Sinon, Godfather a un systeme de cryptage intégré lors de l'inscription.

Ils sont dans scriptfiles, donc l'hébergeur peut les voir. :)
Et dans Godfather ce n'est pas à sens unique, cf: decrypt()

Salut,

Voici un exmple

if (!dini_Exists(udb_encode(playername))) {
dini_Create(udb_encode(playername));
dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));

Le script entier
if(strcmp(cmd, "/reg", true) == 0) {
    tmp = dini_Get(FILE_SETTINGS, "register");
if (strval(tmp) == 0) {
    SendClientMessage(playerid, COLOR_RED, "* l'enregistrement au serveur n'est plus possible.");
    return 1;
}
tmp = dini_Get(FILE_SETTINGS, "maxusers");
tmp2 = dini_Get(FILE_TOTALSTAT, "users");
if (strval(tmp2) >= strval(tmp)) {
    SendClientMessage(playerid, COLOR_RED, "* La limite d'utilisateur est au maximum (enregistrement impossible).");
    return 1;
}

    tmp = strtok(cmdtext, idx);

  GetPlayerName(playerid, playername, sizeof(playername));

        if(20 < strlen(tmp) || strlen(tmp) < 5) {
SendClientMessage(playerid, COLOR_YELLOW, "* Tapez un mot de passe de 5 a 20 caractères.");
return 1;
}

    if(!strlen(tmp))
SendClientMessage(playerid, COLOR_WHITE, "* USAGE: /reg [Passe]");

else {
if (!dini_Exists(udb_encode(playername))) {
dini_Create(udb_encode(playername));
dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));
tmp2 = dini_Get(FILE_SETTINGS, "defaultprotection");
dini_IntSet(udb_encode(playername), "protection", strval(tmp2));
dini_Set(udb_encode(playername), "x", "x");
    dini_Set(udb_encode(playername), "y", "y");
    dini_Set(udb_encode(playername), "z", "z");
    dini_Set(udb_encode(playername), "level", "0");
                if (!dini_Exists(FILE_TOTALSTAT)) dini_Create(FILE_TOTALSTAT);
                tmp2 = dini_Get(FILE_TOTALSTAT, "users");
dini_IntSet(FILE_TOTALSTAT, "users", strval(tmp2)+1);
format(string, sizeof(string), "--- %s (id: %d) Compte crée. Mot de passe: %s.", playername, playerid, tmp);
printf(string);
format(string, sizeof(string), "* Compte [%s] Crée Le mot de passe est: [%s]", playername, tmp);
                tmp = dini_Get(FILE_TOTALSTAT, "joueurs");
            dini_IntSet(FILE_TOTALSTAT, "joueurs", strval(tmp)+1);
SendClientMessage(playerid, COLOR_GREEN, string);
}
else {
format(string, sizeof(string), "Le Compte %s existe déjà.", playername,tmp);
SendClientMessage(playerid, COLOR_RED, string);
}
}

return 1;
}

a toi de tout modifier a ta façon pour qui soit compatible avec ton system de Membre

Cordialement,

Pas à sens unique non plus. :(
http://wiki.sa-mp.com/wiki/Scripting_Functions_Old#uudecode

Bonsoir :)

Tu veux nécéssairement encrypter en md5? Tout dépend du niveau de cryptage que tu exiges.
Personnellement, je programmes, mais pas en pawn, et tout ce que je sais, c'est que gérer le md5 en pawn n'était pas nativement possible.
Alors, peut être qu'un encryptage sur la base d'un XOR avec une clef (string), ça suffirait (comme je le dis, ça dépend du niveau de sécurité que tu attends).
Et je pense que c'est plus facilement gérable en pawn que le md5 (après, ça n'est pas un langage que je connais).

C'est juste une suggestion, bonne soirée ;)

Je veut crypter à sens unique. :)
Le seul procédé qui agit ainsi est le MD5, je ne sais pas s'il y en a d'autre je ne m'y connait pas trop...
Si l'hébergeur peur voir ma fonction pour décrypter il pourra voir les pass des membres... ;D

++
Alexandre
Titre: Re : Comment hashé un string en md5 ?
Posté par: Samumu le 20 Mai 2008, 23:29:11
D'accord, je n'avais pas bien compris ta demande.
Quitte à hasher pour de bon, essayes de voir si l'algo SHA-1, voire SHA-256 est disponible en pawn ;)
Le SHA-1 est considéré comme un peu plus sûr (bien plus pour le SHA-256) que le md5 (bon, et en même temps, je me demande ce qu'une des plutôt rares personnes capable de cracker un md5 viendraient foutre à chercher les pass de tes membre :D)

Bonne soirée ;)
Titre: Re : Comment hashé un string en md5 ?
Posté par: Syg le 21 Mai 2008, 14:12:11
Tiens, voici le contenu de mon fichier MD5-pwn.inc que j'avais récupéré sur le forum SA-MP :
http://pastebin.gtaonline.fr/pastebin.php?show=437

Il suffit de coller ça dans un fichier include (MD5-pwn.inc par exemple) et de mettre ce fichier dans le répertoire des includes.

Bien évidement il faut inclure le fichier dans le script :
#include <MD5-pwn>
Et pour hasher une chaine en MD5 :
password = MD5_Hash (password);
NB : Effectivement, comme le dit Samumu, la SHA1 ou 256 est plus sécurisé que le MDA5 mais je crois qu'il n'existe pas de script tout fait pour faire du SHA.

++
Syg
Titre: Re : Comment hashé un string en md5 ?
Posté par: Nikko™ le 21 Mai 2008, 14:41:19
Je s'avais meme pas que c'était possible ....

++
nikko
Titre: Re:
Posté par: Bayshore le 22 Mai 2008, 11:21:02
Ah super, merci Syg !! :happy

++
Alexandre
Titre: Re : Comment hashé un string en md5 ?
Posté par: spykerc8 le 23 Mai 2008, 00:43:55
Il faut faire attention au fait que cet include met le résultat du hash en majuscules, ce qui n'est pas sensé être le cas pour un md5 normal.

Vous avez intérêt à vérifier ca sinon vous allez chercher longtemps pour pas grand chose :)