begin process at 2010 03 20 06:56:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > FONCTION MD5

FONCTION MD5


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : Dri

Ecrire un message privé
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) );


 Sources du même auteur

NUMERO DE LA SEMAINE

 Sources de la même categorie

Source avec Zip Source avec une capture SÉQUENCEUR par jdmcreator
Source avec Zip COMPRESSION DE TEXTE CÔTÉ CLIENT EN JS VIA ALGORYTHME LZW par niamor36
Source avec Zip VIRTUAL IPHONE (V.2) par loicseg
Source avec Zip MOOTABLEAU par Miky76
Source avec Zip CALCULER VOTRE IMC par lesnouesremy

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CRYPTOR - PROTEGEZ VOS CODES SOURCES ! par amrounix
Source avec Zip Source avec une capture QUIZZ MASTER : 2000 QUESTIONS POUR TESTER VOTRE CULTURE par amrounix
Source avec Zip CRYPTAGE DE TEXTE PAR ALGORITHME DE VIGÉNÈRE par frinux
CRYPTAGE PAR DÉCALAGE D'UN EMAIL par Grafiii
Source avec Zip LIBRAIRIE UTF8 (CODAGE ET DECODAGE À LA VOLÉE ) par rubiks10

Commentaires et avis

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é.

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.

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.

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

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...

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.

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.

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 dans le forum

Cryptage Javascript. [ par AzNt3RRy ] Bonjour tout le monde!Ayant parcouru la quasi totalit&#233; des sources ainsi que le forum, je n'ai pas pu trouv&#233; de r&#233;ponse &#224; "mon pro codage ANSI des caracteres [ par ofirc ] Bonjour à tousJ'utilise en javascript la fonction charCodeAt() qui donne le code des caracteres.j'ai un probleme avec le caractère ' :Exemple :    w= Javascript: problème avec Unicode [ par Amallric ] Bonjour,J'ai un site qui fonctionne avec AJAX composé de:- une page index.php pour l'affichage qui contient des balises HTML, avec la balise:[CODE]&lt SCRIPT DE REDIRECTION APRES CRYPTAGE [ par scheyder ] Bonjour,J'ai déjà un script qui crypte login et mot de passe en deux séries de nombres.J'avais un script que je mettais dans ma page HTML réclamant lo Cryptage en pascal [ par enzan ] Salut ,j'ai besoin de votre aide en cet probleme : On se propose d'écrire un programme qui fait la compression d'un écran texte de format 25 lignes 80


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales