PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.javascript > MD5
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
MD5

Réponse
 
LinkBack Outils de la discussion
Vieux 02/09/2007, 17h36   #1 (permalink)
Thierry Loiseau
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut MD5

Bonjour,

Je suis à la recherche d'un script codant en MD5. J'avais vu il y a
plusieurs mois cela à l'occasion d'un concours sur le net, mais je ne
retrouve pas.

Vous avez une piste ?

Merci et bonne nouvelle semaine à vous,

Thierry
--
4 Calculs & Astronomie en Javascript : <http://astrophoto.free.fr>
3 " Il y a 10 sortes de personnes sur Terre : ceux qui connais-
2 sent le système binaire et ceux qui ne le connaissent pas "
1....'....12.....'....24.....'....36.....'....48.. ...'....60.....'....72
  Réponse avec citation
Vieux 02/09/2007, 18h57   #2 (permalink)
Patrick Mevzek
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Le Sun, 02 Sep 2007 18:36:30 +0200, Thierry Loiseau a écrit:
> Je suis à la recherche d'un script codant en MD5. J'avais vu il y a
> plusieurs mois cela à l'occasion d'un concours sur le net, mais je ne
> retrouve pas.
>
> Vous avez une piste ?


http://actuel.fr.selfhtml.org/articl.../md5/index.htm

(premier lien en mettant javascript et MD5 dans Google)

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>
  Réponse avec citation
Vieux 02/09/2007, 19h04   #3 (permalink)
Thierry Loiseau
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Patrick Mevzek <pm-N200708@nospam.dotandco.com> wrote:

> > Vous avez une piste ?

>
> http://actuel.fr.selfhtml.org/articl.../md5/index.htm
>
> (premier lien en mettant javascript et MD5 dans Google)


Ben oui, c'est tout simplement cela ! Merci Patrick !

En copie ci-dessous le script :

/*
* md5.js 1.0b 27/06/96
*
* Javascript implementation of the RSA Data Security, Inc. MD5
* Message-Digest Algorithm.
*
* Copyright (c) 1996 Henri Torgemane. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for any purposes and without
* fee is hereby granted provided that this copyright notice
* appears in all copies.
*
* Of course, this soft is provided "as is" without express or implied
* warranty of any kind.
*
*
* Modified with german comments and some information about collisions.
* (Ralf Mieke, ralf@miekenet.de, http://mieke.home.pages.de)
* French translation: Serge François, serge@selfhtml.org,
http://fr.selfhtml.org
*/



function array(n) {
for(i=0;i<n;i++) this[i]=0;
this.length=n;
}



/* Quelques fonctions fondamentales doivent être transformées à cause
* d'erreurs Javascript.
* Essayez par exemple de calculer 0xffffffff >> 4 ...
* Les fonctions utilisées maintenant sont il est vrai plus lentes que
les
* fonctions originales mais elles fonctionnent.
*/

function integer(n) { return n%(0xffffffff+1); }

function shr(a,b) {
a=integer(a);
b=integer(b);
if (a-0x80000000>=0) {
a=a%0x80000000;
a>>=b;
a+=0x40000000>>(b-1);
} else
a>>=b;
return a;
}

function shl1(a) {
a=a%0x80000000;
if (a&0x40000000==0x40000000)
{
a-=0x40000000;
a*=2;
a+=0x80000000;
} else
a*=2;
return a;
}

function shl(a,b) {
a=integer(a);
b=integer(b);
for (var i=0;i<b;i++) a=shl1(a);
return a;
}

function and(a,b) {
a=integer(a);
b=integer(b);
var t1=(a-0x80000000);
var t2=(b-0x80000000);
if (t1>=0)
if (t2>=0)
return ((t1&t2)+0x80000000);
else
return (t1&b);
else
if (t2>=0)
return (a&t2);
else
return (a&b);
}

function or(a,b) {
a=integer(a);
b=integer(b);
var t1=(a-0x80000000);
var t2=(b-0x80000000);
if (t1>=0)
if (t2>=0)
return ((t1|t2)+0x80000000);
else
return ((t1|b)+0x80000000);
else
if (t2>=0)
return ((a|t2)+0x80000000);
else
return (a|b);
}

function xor(a,b) {
a=integer(a);
b=integer(b);
var t1=(a-0x80000000);
var t2=(b-0x80000000);
if (t1>=0)
if (t2>=0)
return (t1^t2);
else
return ((t1^b)+0x80000000);
else
if (t2>=0)
return ((a^t2)+0x80000000);
else
return (a^b);
}

function not(a) {
a=integer(a);
return (0xffffffff-a);
}

/* Début de l'algorithme */

var state = new array(4);
var count = new array(2);
count[0] = 0;
count[1] = 0;
var buffer = new array(64);
var transformBuffer = new array(16);
var digestBits = new array(16);

var S11 = 7;
var S12 = 12;
var S13 = 17;
var S14 = 22;
var S21 = 5;
var S22 = 9;
var S23 = 14;
var S24 = 20;
var S31 = 4;
var S32 = 11;
var S33 = 16;
var S34 = 23;
var S41 = 6;
var S42 = 10;
var S43 = 15;
var S44 = 21;

function F(x,y,z) {
return or(and(x,y),and(not(x),z));
}

function G(x,y,z) {
return or(and(x,z),and(y,not(z)));
}

function H(x,y,z) {
return xor(xor(x,y),z);
}

function I(x,y,z) {
return xor(y ,or(x , not(z)));
}

function rotateLeft(a,n) {
return or(shl(a, n),(shr(a,(32 - n))));
}

function FF(a,b,c,d,x,s,ac) {
a = a+F(b, c, d) + x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}

function GG(a,b,c,d,x,s,ac) {
a = a+G(b, c, d) +x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}

function HH(a,b,c,d,x,s,ac) {
a = a+H(b, c, d) + x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}

function II(a,b,c,d,x,s,ac) {
a = a+I(b, c, d) + x + ac;
a = rotateLeft(a, s);
a = a+b;
return a;
}

function transform(buf,offset) {
var a=0, b=0, c=0, d=0;
var x = transformBuffer;

a = state[0];
b = state[1];
c = state[2];
d = state[3];

for (i = 0; i < 16; i++) {
x[i] = and(buf[i*4+offset],0xff);
for (j = 1; j < 4; j++) {
x[i]+=shl(and(buf[i*4+j+offset] ,0xff), j * 8);
}
}

/* tour 1 */
a = FF ( a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
d = FF ( d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
c = FF ( c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
b = FF ( b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
a = FF ( a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
d = FF ( d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
c = FF ( c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
b = FF ( b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
a = FF ( a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
d = FF ( d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
c = FF ( c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
b = FF ( b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
a = FF ( a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
d = FF ( d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
c = FF ( c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
b = FF ( b, c, d, a, x[15], S14, 0x49b40821); /* 16 */

/* tour 2 */
a = GG ( a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
d = GG ( d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
c = GG ( c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
b = GG ( b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
a = GG ( a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
d = GG ( d, a, b, c, x[10], S22, 0x2441453); /* 22 */
c = GG ( c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
b = GG ( b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
a = GG ( a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
d = GG ( d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
c = GG ( c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
b = GG ( b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
a = GG ( a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
d = GG ( d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
c = GG ( c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
b = GG ( b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */

/* tour 3 */
a = HH ( a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
d = HH ( d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
c = HH ( c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
b = HH ( b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
a = HH ( a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
d = HH ( d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
c = HH ( c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
b = HH ( b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
a = HH ( a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
d = HH ( d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
c = HH ( c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
b = HH ( b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
a = HH ( a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
d = HH ( d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
c = HH ( c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
b = HH ( b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */

/* tour 4 */
a = II ( a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
d = II ( d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
c = II ( c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
b = II ( b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
a = II ( a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
d = II ( d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
c = II ( c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
b = II ( b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
a = II ( a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
d = II ( d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
c = II ( c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
b = II ( b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
a = II ( a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
d = II ( d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
c = II ( c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
b = II ( b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */

state[0] +=a;
state[1] +=b;
state[2] +=c;
state[3] +=d;

}
/* Avec l'initialisation de Dobbertin:
state[0] = 0x12ac2375;
state[1] = 0x3b341042;
state[2] = 0x5f62b97c;
state[3] = 0x4ba763ed;
s'il y a une collision:




*/
function init() {
count[0]=count[1] = 0;
state[0] = 0x67452301;
state[1] = 0xefcdab89;
state[2] = 0x98badcfe;
state[3] = 0x10325476;
for (i = 0; i < digestBits.length; i++)
digestBits[i] = 0;
}

function update(b) {
var index,i;

index = and(shr(count[0],3) , 0x3f);
if (count[0]<0xffffffff-7)
count[0] += 8;
else {
count[1]++;
count[0]-=0xffffffff+1;
count[0]+=8;
}
buffer[index] = and(b,0xff);
if (index >= 63) {
transform(buffer, 0);
}
}

function finish() {
var bits = new array(8);
var padding;
var i=0, index=0, padLen=0;

for (i = 0; i < 4; i++) {
bits[i] = and(shr(count[0],(i * 8)), 0xff);
}
for (i = 0; i < 4; i++) {
bits[i+4]=and(shr(count[1],(i * 8)), 0xff);
}
index = and(shr(count[0], 3) ,0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
padding = new array(64);
padding[0] = 0x80;
for (i=0;i<padLen;i++)
update(padding[i]);
for (i=0;i<8;i++)
update(bits[i]);

for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
digestBits[i*4+j] = and(shr(state[i], (j * 8)) , 0xff);
}
}
}

/* Fin de l'algorithme MD5 */

function hexa(n) {
var hexa_h = "0123456789abcdef";
var hexa_c="";
var hexa_m=n;
for (hexa_i=0;hexa_i<8;hexa_i++) {
hexa_c=hexa_h.charAt(Math.abs(hexa_m)%16)+hexa_c;
hexa_m=Math.floor(hexa_m/16);
}
return hexa_c;
}


var ascii="01234567890123456789012345678901" +
"
!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"+
"[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";

function MD5(message)
{
var l,s,k,ka,kb,kc,kd;

init();
for (k=0;k<message.length;k++) {
l=message.charAt(k);
update(ascii.lastIndexOf(l));
}
finish();
ka=kb=kc=kd=0;
for (i=0;i<4;i++) ka+=shl(digestBits[15-i], (i*8));
for (i=4;i<8;i++) kb+=shl(digestBits[15-i], ((i-4)*8));
for (i=8;i<12;i++) kc+=shl(digestBits[15-i], ((i-8)*8));
for (i=12;i<16;i++) kd+=shl(digestBits[15-i], ((i-12)*8));
s=hexa(kd)+hexa(kc)+hexa(kb)+hexa(ka);
return s;
}
  Réponse avec citation
Vieux 03/09/2007, 02h25   #4 (permalink)
Mickaël Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Patrick Mevzek a écrit :

> http://actuel.fr.selfhtml.org/articl.../md5/index.htm


À noter que, hacher le mot de passe avec md5 depuis le client est
furieusement inutile. Au contraire, ça enlève une difficulté pour
pirater un compte.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
  Réponse avec citation
Vieux 03/09/2007, 10h17   #5 (permalink)
O.L.
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Mickaël Wolff a exposé le 03/09/2007 :
> Patrick Mevzek a écrit :
>
>> http://actuel.fr.selfhtml.org/articl.../md5/index.htm

>
> À noter que, hacher le mot de passe avec md5 depuis le client est
> furieusement inutile. Au contraire, ça enlève une difficulté pour
> pirater un compte.


Comment ça ?

Si on hache juste le mot de passe je veux bien croire que ça ne serve
pas à grand chose, mais si on fais un MD5(passe+clé), avec 'clé' qui
est une donnée aléatoire changeant à chaque affichage du formulaire, là
ça devient plus dur à cracker, puisque chaque appel au formulaire
devient unique et non reproductible ... non ?

--
Olivier Ligny
www.virgal.net (Monde persistant)


  Réponse avec citation
Vieux 03/09/2007, 10h47   #6 (permalink)
Mickaël Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

O.L. a écrit :

> Comment ça ?
>
> Si on hache juste le mot de passe je veux bien croire que ça ne serve
> pas à grand chose, mais si on fais un MD5(passe+clé), avec 'clé' qui est
> une donnée aléatoire changeant à chaque affichage du formulaire, là ça
> devient plus dur à cracker, puisque chaque appel au formulaire devient
> unique et non reproductible ... non ?
>


Et comment cette clé est transmise ? Le seul moyen d'obtenir un
traitement sécurisé de l'authentification, c'est de passer par le
chiffrement de la communication (SSL par exemple). Les autres méthodes
sont des bricolages tentant d'être plus malin qu'un pirate. Ce qui est
peine perdue.

Mais ce n'est que mon opinion.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
  Réponse avec citation
Vieux 05/09/2007, 22h33   #7 (permalink)
Laurent vilday
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Thierry Loiseau a écrit :
> En copie ci-dessous le script :


Au secours, j'ai cru avoir une ènième attaque cardiaque en lisant ça...
C'est bourré de variables globales et de fonctions toutes bizarres, etc.
Mériterait une grosse refonte tout ça.

> * Javascript implementation of the RSA Data Security, Inc. MD5
> * Message-Digest Algorithm.
> *
> * Copyright (c) 1996 Henri Torgemane. All Rights Reserved.


Euhhh, c'est copyrightable l'implémentation d'un algorithme ?

> * Permission to use, copy, modify, and distribute this software
> * and its documentation for any purposes and without
> * fee is hereby granted provided that this copyright notice
> * appears in all copies.


Ah non, pas de refonte, me saoulent tous avec leur "copyright notice
provided in all copies". Pfff.

> function array(n) {
> for(i=0;i<n;i++) this[i]=0;
> this.length=n;
> }


Ca semble bizarre a personne ça ? Pourquoi ne pas utiliser Array tout
simplement ? Me parait obsolète ce code, non ? Tout du moins
vieillissant alors.

> /* Quelques fonctions fondamentales doivent être transformées à cause
> * d'erreurs Javascript.
> * Essayez par exemple de calculer 0xffffffff >> 4 ...
> * Les fonctions utilisées maintenant sont il est vrai plus lentes que
> * les fonctions originales mais elles fonctionnent.
> */


Suis nul en math, c'est supposé faire quoi 0xffffffff >> 4 ?
Tous mes navigateurs me disent -1, ils se trompent ?

> function integer(n) { return n%(0xffffffff+1); }


J'imagine que cette méthode est due au commentaire précédent, mais euh
si 0xffffffff >> 4 ça fait bien -1, dans ce cas un bon vieux
parseInt(n,10) suffira je pense. Est-ce que quelqu'un pourrait
m'éclairer svp ? merci.

> function shr(a,b) {
> a=integer(a);
> b=integer(b);
> if (a-0x80000000>=0) {
> a=a%0x80000000;
> a>>=b;
> a+=0x40000000>>(b-1);
> } else
> a>>=b;
> return a;
> }


Que c'est laid, mais que c'est laid ces ouvertures de {} que quand ça
lui chante. Enfin bref le langage autorise cette "erreur", tant pis
j'arrête de regarder maintenant, ça me fait trop mal aux yeux

Dire que c'est des humains qui pondent des trucs pareils, ça me fait
froid dans le dos...

--
laurent
  Réponse avec citation
Vieux 05/09/2007, 22h35   #8 (permalink)
Laurent vilday
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Mickaël Wolff a écrit :
> O.L. a écrit :
>> Si on hache juste le mot de passe je veux bien croire que ça ne serve
>> pas à grand chose, mais si on fais un MD5(passe+clé), avec 'clé' qui est
>> une donnée aléatoire changeant à chaque affichage du formulaire, là ça
>> devient plus dur à cracker, puisque chaque appel au formulaire devient
>> unique et non reproductible ... non ?

>
> Et comment cette clé est transmise ?


Lol elle est là l'astuce Ce sera nettement plus difficile à "cracker"

--
laurent
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 11h03.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,21934 seconds with 16 queries