begin process at 2008 08 20 17:46:28
1 229 001 membres
360 nouveaux aujourd'hui
14 259 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FONCTION MD5


Information sur la source

Catégorie :Divers Classé sous : md5, hachage, cryptage, ansi, unicode Niveau : Initié Date de création : 10/03/2007 Vu : 6 113

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

Une fonction qui calcule le md5 d'une chaîne de caractères avec en option le résultat en majuscule et le format de la chaîne (ansi ou unicode).

Source

  • /**
  • * Message Digest 5 hash code function
  • *
  • * @author Dri
  • * @version 1.0
  • *
  • * @param String message
  • * @param bool upper_case
  • * @param bool unicode
  • */
  • function md5(message, upper_case, unicode) {
  • //misc functions
  • var add = function(x, y) {
  • var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  • var msw = (x >>> 16) + (y >>> 16) + (lsw >>> 16);
  • return (msw << 16) | (lsw & 0xFFFF);
  • }
  • var rol = function(x, y){
  • return (x << y) | (x >>> (32 - y));
  • }
  • var hex = function(abcd) {
  • var hex_string = "";
  • var hex_buffer = "0123456789abcdef";
  • if(upper_case) hex_buffer = hex_buffer.toUpperCase();
  • for(var i = 0; i < abcd.length; i++) for(var j = 0; j < 32; j += 8)
  • hex_string += hex_buffer.charAt( (abcd[i] >> (j+4)) & 0xF) + hex_buffer.charAt( (abcd[i] >> j) & 0xF);
  • return hex_string;
  • }
  • //md5 functions
  • var xx = function(q, a, b, x, s, ac) {
  • return add(rol(add(add(a, q), add(x, ac)), s),b);
  • }
  • var ff = function(a, b, c, d, x, s, ac) {
  • return xx((b & c) | ((~b) & d), a, b, x, s, ac);
  • }
  • var gg = function(a, b, c, d, x, s, ac) {
  • return xx((b & d) | (c & (~d)), a, b, x, s, ac);
  • }
  • var hh = function(a, b, c, d, x, s, ac) {
  • return xx(b ^ c ^ d, a, b, x, s, ac);
  • }
  • var ii = function(a, b, c, d, x, s, ac) {
  • return xx(c ^ (b | (~d)), a, b, x, s, ac);
  • }
  • //message digest buffer
  • message = message.toString();
  • var i;
  • var buffer = [];
  • var char_size = unicode ? 16 : 8;
  • var char_mask = (1 << char_size) - 1;
  • for(i = 0; i < message.length * char_size; i += char_size)
  • buffer[i >> 5] |= (message.charCodeAt(i / char_size) & char_mask) << (i & 0x1F);
  • //message digest padding
  • buffer[i >> 5] |= 0x80 << (i & 0x1F);
  • buffer[(((i + 64) >>> 5) & ~0xF) + 14] = i;
  • //message digest loop
  • var a = 0x67452301;
  • var b = 0xEFCDAB89;
  • var c = 0x98BADCFE;
  • var d = 0x10325476;
  • for(i = 0; i < buffer.length; i += 16) {
  • var temp_a = a;
  • var temp_b = b;
  • var temp_c = c;
  • var temp_d = d;
  • a = ff(a, b, c, d, buffer[i+ 0], 7, 0xD76AA478);
  • d = ff(d, a, b, c, buffer[i+ 1], 12, 0xE8C7B756);
  • c = ff(c, d, a, b, buffer[i+ 2], 17, 0x242070DB);
  • b = ff(b, c, d, a, buffer[i+ 3], 22, 0xC1BDCEEE);
  • a = ff(a, b, c, d, buffer[i+ 4], 7, 0xF57C0FAF);
  • d = ff(d, a, b, c, buffer[i+ 5], 12, 0x4787C62A);
  • c = ff(c, d, a, b, buffer[i+ 6], 17, 0xA8304613);
  • b = ff(b, c, d, a, buffer[i+ 7], 22, 0xFD469501);
  • a = ff(a, b, c, d, buffer[i+ 8], 7, 0x698098D8);
  • d = ff(d, a, b, c, buffer[i+ 9], 12, 0x8B44F7AF);
  • c = ff(c, d, a, b, buffer[i+10], 17, 0xFFFF5BB1);
  • b = ff(b, c, d, a, buffer[i+11], 22, 0x895CD7BE);
  • a = ff(a, b, c, d, buffer[i+12], 7, 0x6B901122);
  • d = ff(d, a, b, c, buffer[i+13], 12, 0xFD987193);
  • c = ff(c, d, a, b, buffer[i+14], 17, 0xA679438E);
  • b = ff(b, c, d, a, buffer[i+15], 22, 0x49B40821);
  • a = gg(a, b, c, d, buffer[i+ 1], 5, 0xF61E2562);
  • d = gg(d, a, b, c, buffer[i+ 6], 9, 0xC040B340);
  • c = gg(c, d, a, b, buffer[i+11], 14, 0x265E5A51);
  • b = gg(b, c, d, a, buffer[i+ 0], 20, 0xE9B6C7AA);
  • a = gg(a, b, c, d, buffer[i+ 5], 5, 0xD62F105D);
  • d = gg(d, a, b, c, buffer[i+10], 9, 0x02441453);
  • c = gg(c, d, a, b, buffer[i+15], 14, 0xD8A1E681);
  • b = gg(b, c, d, a, buffer[i+ 4], 20, 0xE7D3FBC8);
  • a = gg(a, b, c, d, buffer[i+ 9], 5, 0x21E1CDE6);
  • d = gg(d, a, b, c, buffer[i+14], 9, 0xC33707D6);
  • c = gg(c, d, a, b, buffer[i+ 3], 14, 0xF4D50D87);
  • b = gg(b, c, d, a, buffer[i+ 8], 20, 0x455A14ED);
  • a = gg(a, b, c, d, buffer[i+13], 5, 0xA9E3E905);
  • d = gg(d, a, b, c, buffer[i+ 2], 9, 0xFCEFA3F8);
  • c = gg(c, d, a, b, buffer[i+ 7], 14, 0x676F02D9);
  • b = gg(b, c, d, a, buffer[i+12], 20, 0x8D2A4C8A);
  • a = hh(a, b, c, d, buffer[i+ 5], 4, 0xFFFA3942);
  • d = hh(d, a, b, c, buffer[i+ 8], 11, 0x8771F681);
  • c = hh(c, d, a, b, buffer[i+11], 16, 0x6D9D6122);
  • b = hh(b, c, d, a, buffer[i+14], 23, 0xFDE5380C);
  • a = hh(a, b, c, d, buffer[i+ 1], 4, 0xA4BEEA44);
  • d = hh(d, a, b, c, buffer[i+ 4], 11, 0x4BDECFA9);
  • c = hh(c, d, a, b, buffer[i+ 7], 16, 0xF6BB4B60);
  • b = hh(b, c, d, a, buffer[i+10], 23, 0xBEBFBC70);
  • a = hh(a, b, c, d, buffer[i+13], 4, 0x289B7EC6);
  • d = hh(d, a, b, c, buffer[i+ 0], 11, 0xEAA127FA);
  • c = hh(c, d, a, b, buffer[i+ 3], 16, 0xD4EF3085);
  • b = hh(b, c, d, a, buffer[i+ 6], 23, 0x04881D05);
  • a = hh(a, b, c, d, buffer[i+ 9], 4, 0xD9D4D039);
  • d = hh(d, a, b, c, buffer[i+12], 11, 0xE6DB99E5);
  • c = hh(c, d, a, b, buffer[i+15], 16, 0x1FA27CF8);
  • b = hh(b, c, d, a, buffer[i+ 2], 23, 0xC4AC5665);
  • a = ii(a, b, c, d, buffer[i+ 0], 6, 0xF4292244);
  • d = ii(d, a, b, c, buffer[i+ 7], 10, 0x432AFF97);
  • c = ii(c, d, a, b, buffer[i+14], 15, 0xAB9423A7);
  • b = ii(b, c, d, a, buffer[i+ 5], 21, 0xFC93A039);
  • a = ii(a, b, c, d, buffer[i+12], 6, 0x655B59C3);
  • d = ii(d, a, b, c, buffer[i+ 3], 10, 0x8F0CCC92);
  • c = ii(c, d, a, b, buffer[i+10], 15, 0xFFEFF47D);
  • b = ii(b, c, d, a, buffer[i+ 1], 21, 0x85845DD1);
  • a = ii(a, b, c, d, buffer[i+ 8], 6, 0x6FA87E4F);
  • d = ii(d, a, b, c, buffer[i+15], 10, 0xFE2CE6E0);
  • c = ii(c, d, a, b, buffer[i+ 6], 15, 0xA3014314);
  • b = ii(b, c, d, a, buffer[i+13], 21, 0x4E0811A1);
  • a = ii(a, b, c, d, buffer[i+ 4], 6, 0xF7537E82);
  • d = ii(d, a, b, c, buffer[i+11], 10, 0xBD3AF235);
  • c = ii(c, d, a, b, buffer[i+ 2], 15, 0x2AD7D2BB);
  • b = ii(b, c, d, a, buffer[i+ 9], 21, 0xEB86D391);
  • a = add(a, temp_a);
  • b = add(b, temp_b);
  • c = add(c, temp_c);
  • d = add(d, temp_d);
  • }
  • return hex( [a, b, c, d] );
  • }
/**
 * Message Digest 5 hash code function
 * 
 * @author	Dri
 * @version	1.0
 * 
 * @param	String	message
 * @param	bool	upper_case
 * @param	bool	unicode
 */

function md5(message, upper_case, unicode) {
	
	//misc functions
	
	var add = function(x, y) {
		var lsw = (x & 0xFFFF) + (y & 0xFFFF);
		var msw = (x >>> 16) + (y >>> 16) + (lsw >>> 16);
		return (msw << 16) | (lsw & 0xFFFF);
	}
	
	var rol = function(x, y){
		return (x << y) | (x >>> (32 - y));
	}
	
	var hex = function(abcd) {
		var hex_string = "";
		var hex_buffer = "0123456789abcdef";
								   
		if(upper_case) hex_buffer = hex_buffer.toUpperCase();
		
		for(var i = 0; i < abcd.length; i++) for(var j = 0; j < 32; j += 8)
			hex_string += hex_buffer.charAt( (abcd[i] >> (j+4)) & 0xF) + hex_buffer.charAt( (abcd[i] >> j) & 0xF);
		
		return hex_string;
	}
	
	//md5 functions
	
	var xx = function(q, a, b, x, s, ac) {
		return add(rol(add(add(a, q), add(x, ac)), s),b);
	}
	
	var ff = function(a, b, c, d, x, s, ac) {
		return xx((b & c) | ((~b) & d), a, b, x, s, ac);
	}
	
	var gg = function(a, b, c, d, x, s, ac) {
		return xx((b & d) | (c & (~d)), a, b, x, s, ac);
	}
	
	var hh = function(a, b, c, d, x, s, ac) {
		return xx(b ^ c ^ d, a, b, x, s, ac);
	}
	
	var ii = function(a, b, c, d, x, s, ac) {
		return xx(c ^ (b | (~d)), a, b, x, s, ac);
	}
	
	//message digest buffer
	
	message = message.toString();
	
	var i;
	var buffer = [];
	var char_size = unicode ? 16 : 8;
	var char_mask = (1 << char_size) - 1;
	
	for(i = 0; i < message.length * char_size; i += char_size)
		buffer[i >> 5] |= (message.charCodeAt(i / char_size) & char_mask) << (i & 0x1F);
	
	//message digest padding
	
	buffer[i >> 5] |= 0x80 << (i & 0x1F);
	buffer[(((i + 64) >>> 5) & ~0xF) + 14] = i;
	
	//message digest loop
	
	var a = 0x67452301;
	var b = 0xEFCDAB89;
	var c = 0x98BADCFE;
	var d = 0x10325476;
	
	for(i = 0; i < buffer.length; i += 16) {
		var temp_a = a;
		var temp_b = b;
		var temp_c = c;
		var temp_d = d;
		
		a = ff(a, b, c, d, buffer[i+ 0],  7, 0xD76AA478);
		d = ff(d, a, b, c, buffer[i+ 1], 12, 0xE8C7B756);
		c = ff(c, d, a, b, buffer[i+ 2], 17, 0x242070DB);
		b = ff(b, c, d, a, buffer[i+ 3], 22, 0xC1BDCEEE);
		a = ff(a, b, c, d, buffer[i+ 4],  7, 0xF57C0FAF);
		d = ff(d, a, b, c, buffer[i+ 5], 12, 0x4787C62A);
		c = ff(c, d, a, b, buffer[i+ 6], 17, 0xA8304613);
		b = ff(b, c, d, a, buffer[i+ 7], 22, 0xFD469501);
		a = ff(a, b, c, d, buffer[i+ 8],  7, 0x698098D8);
		d = ff(d, a, b, c, buffer[i+ 9], 12, 0x8B44F7AF);
		c = ff(c, d, a, b, buffer[i+10], 17, 0xFFFF5BB1);
		b = ff(b, c, d, a, buffer[i+11], 22, 0x895CD7BE);
		a = ff(a, b, c, d, buffer[i+12],  7, 0x6B901122);
		d = ff(d, a, b, c, buffer[i+13], 12, 0xFD987193);
		c = ff(c, d, a, b, buffer[i+14], 17, 0xA679438E);
		b = ff(b, c, d, a, buffer[i+15], 22, 0x49B40821);
		
		a = gg(a, b, c, d, buffer[i+ 1],  5, 0xF61E2562);
		d = gg(d, a, b, c, buffer[i+ 6],  9, 0xC040B340);
		c = gg(c, d, a, b, buffer[i+11], 14, 0x265E5A51);
		b = gg(b, c, d, a, buffer[i+ 0], 20, 0xE9B6C7AA);
		a = gg(a, b, c, d, buffer[i+ 5],  5, 0xD62F105D);
		d = gg(d, a, b, c, buffer[i+10],  9, 0x02441453);
		c = gg(c, d, a, b, buffer[i+15], 14, 0xD8A1E681);
		b = gg(b, c, d, a, buffer[i+ 4], 20, 0xE7D3FBC8);
		a = gg(a, b, c, d, buffer[i+ 9],  5, 0x21E1CDE6);
		d = gg(d, a, b, c, buffer[i+14],  9, 0xC33707D6);
		c = gg(c, d, a, b, buffer[i+ 3], 14, 0xF4D50D87);
		b = gg(b, c, d, a, buffer[i+ 8], 20, 0x455A14ED);
		a = gg(a, b, c, d, buffer[i+13],  5, 0xA9E3E905);
		d = gg(d, a, b, c, buffer[i+ 2],  9, 0xFCEFA3F8);
		c = gg(c, d, a, b, buffer[i+ 7], 14, 0x676F02D9);
		b = gg(b, c, d, a, buffer[i+12], 20, 0x8D2A4C8A);
		
		a = hh(a, b, c, d, buffer[i+ 5],  4, 0xFFFA3942);
		d = hh(d, a, b, c, buffer[i+ 8], 11, 0x8771F681);
		c = hh(c, d, a, b, buffer[i+11], 16, 0x6D9D6122);
		b = hh(b, c, d, a, buffer[i+14], 23, 0xFDE5380C);
		a = hh(a, b, c, d, buffer[i+ 1],  4, 0xA4BEEA44);
		d = hh(d, a, b, c, buffer[i+ 4], 11, 0x4BDECFA9);
		c = hh(c, d, a, b, buffer[i+ 7], 16, 0xF6BB4B60);
		b = hh(b, c, d, a, buffer[i+10], 23, 0xBEBFBC70);
		a = hh(a, b, c, d, buffer[i+13],  4, 0x289B7EC6);
		d = hh(d, a, b, c, buffer[i+ 0], 11, 0xEAA127FA);
		c = hh(c, d, a, b, buffer[i+ 3], 16, 0xD4EF3085);
		b = hh(b, c, d, a, buffer[i+ 6], 23, 0x04881D05);
		a = hh(a, b, c, d, buffer[i+ 9],  4, 0xD9D4D039);
		d = hh(d, a, b, c, buffer[i+12], 11, 0xE6DB99E5);
		c = hh(c, d, a, b, buffer[i+15], 16, 0x1FA27CF8);
		b = hh(b, c, d, a, buffer[i+ 2], 23, 0xC4AC5665);
		
		a = ii(a, b, c, d, buffer[i+ 0],  6, 0xF4292244);
		d = ii(d, a, b, c, buffer[i+ 7], 10, 0x432AFF97);
		c = ii(c, d, a, b, buffer[i+14], 15, 0xAB9423A7);
		b = ii(b, c, d, a, buffer[i+ 5], 21, 0xFC93A039);
		a = ii(a, b, c, d, buffer[i+12],  6, 0x655B59C3);
		d = ii(d, a, b, c, buffer[i+ 3], 10, 0x8F0CCC92);
		c = ii(c, d, a, b, buffer[i+10], 15, 0xFFEFF47D);
		b = ii(b, c, d, a, buffer[i+ 1], 21, 0x85845DD1);
		a = ii(a, b, c, d, buffer[i+ 8],  6, 0x6FA87E4F);
		d = ii(d, a, b, c, buffer[i+15], 10, 0xFE2CE6E0);
		c = ii(c, d, a, b, buffer[i+ 6], 15, 0xA3014314);
		b = ii(b, c, d, a, buffer[i+13], 21, 0x4E0811A1);
		a = ii(a, b, c, d, buffer[i+ 4],  6, 0xF7537E82);
		d = ii(d, a, b, c, buffer[i+11], 10, 0xBD3AF235);
		c = ii(c, d, a, b, buffer[i+ 2], 15, 0x2AD7D2BB);
		b = ii(b, c, d, a, buffer[i+ 9], 21, 0xEB86D391);
		
		a = add(a, temp_a);
		b = add(b, temp_b);
		c = add(c, temp_c);
		d = add(d, temp_d);
	}
	
	return hex( [a, b, c, d] );
}

Conclusion

Testé uniquement sous windows 98 et XP avec IE6, Mozilla, FireFox et Opera 9.
Pour utiliser la fonction voila quelques exemples :

alert( md5("md5") );
alert( md5("md5", true) );

la même chose en unicode

alert( md5("md5", false, true) );
alert( md5("md5", true, true) );
  • signaler à un administrateur
    Commentaire de stfou le 10/03/2007 11:40:48

    Pas testé, moi je trouve plus simple d'utiliser un objet Activex par exemple (je sais pas si ça existe) pour hasher en MD5 mais puisque le MD5 a été craqué, autant expliqué le code, surtout que là il est en javascript...
    J'aime bien ta source, mais je ne noterai pas. désolé.

  • signaler à un administrateur
    Commentaire de Arto_8000 le 10/03/2007 15:49:39

    StFou -> Le md5 n'a jamais été craqué , seul le md4 l'a été. Pour l'instant la seul façon de le faire c'est avec une attaque par dictionnaire ou brute force, mais ça ce n'est pas craquer un algorythme de cryptage.

  • signaler à un administrateur
    Commentaire de Arto_8000 le 10/03/2007 15:52:05

    À propos je suis fort intrigé de savoir où tu à trouver l'algorythme pour l'encodage.

  • signaler à un administrateur
    Commentaire de Dri le 10/03/2007 16:34:21

    Je me suis basé principalement sur le code qu'on trouve ici :
    http://www.bibmath.net/crypto/moderne/md5.php3

  • signaler à un administrateur
    Commentaire de stfou le 10/03/2007 16:36:29

    Ah bon... j'ai du mal lire alors :)
    Par contre, dans ce cas, moi aussi ça m'intrigue O_o
    a mon avis il a du confondre ce code là avec celui du MD4, ou du SHA1...

  • signaler à un administrateur
    Commentaire de stfou le 10/03/2007 16:42:30

    Ah OK... je me disais bien que le MD5 avait été craqué... :)
    au fait petite anecdote, SHA veut dire Secure Hash Algorithm (algorithme de hashage sécurisé)
    et MD veut dire Message-digest.

  • signaler à un administrateur
    Commentaire de benozor77 le 25/03/2007 20:08:53

    Bonjour/Bonsoir,
    En parlant de MD5, voici mon modeste site Web permettant la fonction inverse du MD5.
    En d'autre terme, il permet d'obtenir le texte clair à partir d'un hash MD5.
    Le site intègre également d'autres fonctionnalités...

    Online MD5 Reverser :
    http://ice.breaker.free.fr/

    Bonne journée/soirée à tous.

  • signaler à un administrateur
    Commentaire de Arto_8000 le 26/03/2007 23:19:40

    Ta base de données est bien maigre si tu compares à beacoup de site. Plusieurs sites possèdent environ 200 fois plus de hash que le tiens, il te reste beaucoup à faire.

Ajouter un commentaire

Discussions en rapport avec ce code source

Cryptage Javascript. par AzNt3RRy

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
campagne Adwords
Budget : 5 000€
Boite echanges securis...
Budget : 500€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS