LOGIN: Conversion ISO

Ici, les rôles s’inversent : c’est vous qui proposez votre aide au staff pour améliorer le serveur. Attention, ici on ne demande pas, on propose !
Sp4M
Maître Absolu
Posts: 2904
Joined: 16 Apr 2004, 14:52
Discord:

LOGIN: Conversion ISO

Unread post by Sp4M »

Bon, voila le truc:
Je suis entrain de programmer une petite page d'administration pour les joueurs, qui pourront se loguer grace à leur login et mot de passe de compte. Seulement, voila le probleme:

Le pass est crypté en MD5 dans la base, donc indecryptable. Seule solution: Crypter de la meme maniere le pass que l'utilisateur entre, et ensuite les comparer. Si ils sont identiques, le login est accepté.

Les caracteres, en PHP, sont gerés de maniere standard sur 1 octet (ASCII standard), mais sont stockés en base de donnée en format 2 octets (latin1_swedish). De ce fait, le serveur DOL doit effectuer une conversion "password 1 octets" -> "Password 2 octets"
par la fonction suivante (C#):

Code: Select all

public static string CryptPassword(string password) { 
                          MD5 md5 = new MD5CryptoServiceProvider(); 
                          char[] pw = password.ToCharArray(); 
                          byte[] res = new byte[pw.Length*2]; 
                          for (int i=0; i<pw.Length; i++) { 
                               res[i*2] = (byte)(pw[i]>>8); 
                               res[i*2+1] = (byte)(pw[i]); 
                          } 
                          byte[] bytes = md5.ComputeHash(res); 
                          StringBuilder crypted = new StringBuilder();
           
                          crypted.Append("##"); 
                          for (int i=0; i<bytes.Length; i++) { 
                               crypted.Append(bytes[i].ToString("X"));
           
                          } 
                          return crypted.ToString(); 
                     }
Grossierement, le code double la taille initiale du password, puis stoque :
[1er octet du 1er caractere] [2eme octet du 1er caractere] [1er octet du 2eme caractere] [2eme octet du 2eme caractere] etc...

L'idée est donc de reprendre ce code, et de le transposer en PHP afin de pouvoir faire un systeme de login web.

Voici pour le moment le point ou j'en suis

Code: Select all

function CryptPassword($password) { 
	$extendedPass1 = "";
	for ($i=0; $i<strlen($password); $i++) { 
		$extendedPass1 .= utf8_encode(substr($password,$i,1))>>8;
		$extendedPass1 .= substr($password,$i,1);
	} 
	return md5($extendedPass1);
}
(hors prefixe ## et casse)


Probleme: le resultat obtenu n'est pas le resultat escompté.
à titre de test, j'ai créé le compte suivant
LOGIN: test91
PASS: 123456

Le pass crypté en base de donné est le suivant: EF4DAFDA494AD517E9823AE7D12A4C8

Vous remarquerez qu'il ne s'agit pas tout simplement d'un md5(123456);
Et que le resultat de la fonction PHP est 2f22af9cb71469c8cd7ade2d5f9d69db, donc pas le même.


Je continue de chercher de mon coté, la fonction mb_convert_encoding semble offrir des fonctionnalitées interessantes. Si vous avez des idées ou des solutions pour faire avancer ce probleme, je vous ecoute avec plaisir ;)
Image ©Djip

:arrow: Plaintes: (En cas de plainte sur le forum, vous vous exposez vous même au ban.)
:arrow: Administrateurs: Sp4M[at]Amtenael.com - Malkavien[at]Amtenael.com - Darkpepper - Dre
:arrow: GMA: ?
:arrow: GMT: ?
Sp4M
Maître Absolu
Posts: 2904
Joined: 16 Apr 2004, 14:52
Discord:

Unread post by Sp4M »

Bon, en fait le probleme a été solutionné plus vite que prevu grace au cher admin de DAOC Portal.

Thx a lot Cisien =)
Image ©Djip

:arrow: Plaintes: (En cas de plainte sur le forum, vous vous exposez vous même au ban.)
:arrow: Administrateurs: Sp4M[at]Amtenael.com - Malkavien[at]Amtenael.com - Darkpepper - Dre
:arrow: GMA: ?
:arrow: GMT: ?
Locked