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
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
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, 18h57   #3
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   #4
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 02/09/2007, 19h04   #5
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   #6
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, 02h25   #7
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   #8
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, 10h17   #9
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   #10
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 03/09/2007, 10h47   #11
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   #12
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, 22h33   #13
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   #14
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
Vieux 05/09/2007, 22h35   #15
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
Vieux 06/09/2007, 06h07   #16
Mickaël Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Laurent vilday a écrit :

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


Non. Je un peu pénible. Donc compliquer le processus
d'authentification et y passer de trop nombreuses minutes pour espérer
décourager un éventuel être malveillant... c'est... soyons gentil...
sans intérêt.

Mais ce n'est que mon avis, et j'en resterais lÃ.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
  Réponse avec citation
Vieux 06/09/2007, 06h07   #17
Mickaël Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Laurent vilday a écrit :

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


Non. Je un peu pénible. Donc compliquer le processus
d'authentification et y passer de trop nombreuses minutes pour espérer
décourager un éventuel être malveillant... c'est... soyons gentil...
sans intérêt.

Mais ce n'est que mon avis, et j'en resterais lÃ.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
  Réponse avec citation
Vieux 06/09/2007, 10h14   #18
Laurent vilday
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Mickaël Wolff a écrit :
> Laurent vilday a écrit :
>
>> Lol elle est là l'astuce Ce sera nettement plus difficile à "cracker"

>
> Non. Je un peu pénible.


Quoi quoi quoi ?

Tu peux me la refaire en français STP, j'avoue ne rien avoir compris.

> Donc compliquer le processus

[cut]

Oui et alors ? Tu l'as déjà dit et j'ai *jamais* dit le contraire,
j'allais même dans ton sens, si si. Mais bon, tout le contexte ayant été
supprimé de ton message c'est plus difficile de s'en rendre compte.

Bon, force est de constater que l'humour léger de mon post n'a pas percé
la barrière de mon ordinateur. Tant pis un coup dans l'eau, j'essaierai
d'être plus accessible la prochaine fois.

--
laurent
  Réponse avec citation
Vieux 06/09/2007, 10h14   #19
Laurent vilday
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Mickaël Wolff a écrit :
> Laurent vilday a écrit :
>
>> Lol elle est là l'astuce Ce sera nettement plus difficile à "cracker"

>
> Non. Je un peu pénible.


Quoi quoi quoi ?

Tu peux me la refaire en français STP, j'avoue ne rien avoir compris.

> Donc compliquer le processus

[cut]

Oui et alors ? Tu l'as déjà dit et j'ai *jamais* dit le contraire,
j'allais même dans ton sens, si si. Mais bon, tout le contexte ayant été
supprimé de ton message c'est plus difficile de s'en rendre compte.

Bon, force est de constater que l'humour léger de mon post n'a pas percé
la barrière de mon ordinateur. Tant pis un coup dans l'eau, j'essaierai
d'être plus accessible la prochaine fois.

--
laurent
  Réponse avec citation
Vieux 06/09/2007, 11h24   #20
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Le 05/09/2007 23:33, Laurent vilday a écrit :
>
> [...]
>
>> * Copyright (c) 1996

>
> [...]
>
> Me parait obsolète ce code, non ? Tout du moins
> vieillissant alors.


Ça ne serait pas fait pour me surprendre.
  Réponse avec citation
Vieux 06/09/2007, 11h24   #21
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Le 05/09/2007 23:33, Laurent vilday a écrit :
>
> [...]
>
>> * Copyright (c) 1996

>
> [...]
>
> Me parait obsolète ce code, non ? Tout du moins
> vieillissant alors.


Ça ne serait pas fait pour me surprendre.
  Réponse avec citation
Vieux 06/09/2007, 11h45   #22
Mickaël Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Laurent vilday a écrit :

> 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


Euh... Les accolades sont à écrire quand elles sont nécessaires, pas Ã
tout bout de champs. Il y a déjà bien assez de choses sur la pile.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
  Réponse avec citation
Vieux 06/09/2007, 11h45   #23
Mickaël Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: MD5

Laurent vilday a écrit :

> 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


Euh... Les accolades sont à écrire quand elles sont nécessaires, pas Ã
tout bout de champs. Il y a déjà bien assez de choses sur la pile.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
  Réponse avec citation