Home  >  Article  >  Web Front-end  >  js implements md5 encryption plug-in code sharing

js implements md5 encryption plug-in code sharing

小云云
小云云Original
2018-02-24 14:28:374670browse

This article mainly shares with you the js implementation of the md5 encryption plug-in code, hoping to help everyone.

//使用方法:
//引入文件<script src="yourURL/MD5.js" type="text/javascript" charset="utf-8"></script>
//var MD5=MD5.createMD5String(yourSrting);(
	function(globle,factory){//判断执行环境是否为浏览器
		typeof window != "undefined" ? factory() : concole.log("当前环境不支持该插件");
	}
)(this,function(){
	//创建并实例化MD5对象并让他可以调用自身方法
		function MD5(string){
			this._this = this;
   			return this;
		}
		this.MD5=new MD5;	
		MD5.prototype.createMD5String=function(string) {	
		var x = Array();		
		var k, AA, BB, CC, DD, a, b, c, d;		
		var S11=7, S12=12, S13=17, S14=22;		
		var S21=5, S22=9 , S23=14, S24=20;	
		var S31=4, S32=11, S33=16, S34=23;		
		var S41=6, S42=10, S43=15, S44=21;		
		string = uTF8Encode(string);	
		x = convertToWordArray(string);		
		a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;		
		for (k = 0; k < x.length; k += 16) {			
			AA = a; BB = b; CC = c; DD = d;		
			a = FF(a, b, c, d, x[k+0],  S11, 0xD76AA478);		
			d = FF(d, a, b, c, x[k+1],  S12, 0xE8C7B756);		
			c = FF(c, d, a, b, x[k+2],  S13, 0x242070DB);		
			b = FF(b, c, d, a, x[k+3],  S14, 0xC1BDCEEE);		
			a = FF(a, b, c, d, x[k+4],  S11, 0xF57C0FAF);		
			d = FF(d, a, b, c, x[k+5],  S12, 0x4787C62A);		
			c = FF(c, d, a, b, x[k+6],  S13, 0xA8304613);		
			b = FF(b, c, d, a, x[k+7],  S14, 0xFD469501);		
			a = FF(a, b, c, d, x[k+8],  S11, 0x698098D8);	
			d = FF(d, a, b, c, x[k+9],  S12, 0x8B44F7AF);		
			c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1);		
			b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE);		
			a = FF(a, b, c, d, x[k+12], S11, 0x6B901122);	
			d = FF(d, a, b, c, x[k+13], S12, 0xFD987193);		
			c = FF(c, d, a, b, x[k+14], S13, 0xA679438E);		
			b = FF(b, c, d, a, x[k+15], S14, 0x49B40821);	
			a = GG(a, b, c, d, x[k+1],  S21, 0xF61E2562);		
			d = GG(d, a, b, c, x[k+6],  S22, 0xC040B340);		
			c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51);		
			b = GG(b, c, d, a, x[k+0],  S24, 0xE9B6C7AA);		
			a = GG(a, b, c, d, x[k+5],  S21, 0xD62F105D);		
			d = GG(d, a, b, c, x[k+10], S22, 0x2441453);	
			c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681);	
			b = GG(b, c, d, a, x[k+4],  S24, 0xE7D3FBC8);	
			a = GG(a, b, c, d, x[k+9],  S21, 0x21E1CDE6);	
			d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6);	
			c = GG(c, d, a, b, x[k+3],  S23, 0xF4D50D87);	
			b = GG(b, c, d, a, x[k+8],  S24, 0x455A14ED);	
			a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905);	
			d = GG(d, a, b, c, x[k+2],  S22, 0xFCEFA3F8);	
			c = GG(c, d, a, b, x[k+7],  S23, 0x676F02D9);		
			b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A);	
			a = HH(a, b, c, d, x[k+5],  S31, 0xFFFA3942);		
			d = HH(d, a, b, c, x[k+8],  S32, 0x8771F681);		
			c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122);		
			b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C);		
			a = HH(a, b, c, d, x[k+1],  S31, 0xA4BEEA44);	
			d = HH(d, a, b, c, x[k+4],  S32, 0x4BDECFA9);		
			c = HH(c, d, a, b, x[k+7],  S33, 0xF6BB4B60);	
			b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70);	
			a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6);		
			d = HH(d, a, b, c, x[k+0],  S32, 0xEAA127FA);		
			c = HH(c, d, a, b, x[k+3],  S33, 0xD4EF3085);	
			b = HH(b, c, d, a, x[k+6],  S34, 0x4881D05);		
			a = HH(a, b, c, d, x[k+9],  S31, 0xD9D4D039);		
			d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5);	
			c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8);	
			b = HH(b, c, d, a, x[k+2],  S34, 0xC4AC5665);	
			a = II(a, b, c, d, x[k+0],  S41, 0xF4292244);	
			d = II(d, a, b, c, x[k+7],  S42, 0x432AFF97);		
			c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7);		
			b = II(b, c, d, a, x[k+5],  S44, 0xFC93A039);		
			a = II(a, b, c, d, x[k+12], S41, 0x655B59C3);	
			d = II(d, a, b, c, x[k+3],  S42, 0x8F0CCC92);	
			c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D);	
			b = II(b, c, d, a, x[k+1],  S44, 0x85845DD1);	
			a = II(a, b, c, d, x[k+8],  S41, 0x6FA87E4F);		
			d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0);		
			c = II(c, d, a, b, x[k+6],  S43, 0xA3014314);		
			b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1);	
			a = II(a, b, c, d, x[k+4],  S41, 0xF7537E82);		
			d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235);		
			c = II(c, d, a, b, x[k+2],  S43, 0x2AD7D2BB);		
			b = II(b, c, d, a, x[k+9],  S44, 0xEB86D391);	
			a = addUnsigned(a, AA);	
			b = addUnsigned(b, BB);		
			c = addUnsigned(c, CC);		
			d = addUnsigned(d, DD);		
		}			
		var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);			
		return tempValue.toLowerCase();		
		}
		var rotateLeft = function(lValue, iShiftBits) {
			return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
		}
		var addUnsigned = function(lX, lY) {
			var lX4, lY4, lX8, lY8, lResult;
			lX8 = (lX & 0x80000000);
			lY8 = (lY & 0x80000000);
			lX4 = (lX & 0x40000000);
			lY4 = (lY & 0x40000000);
			lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
			if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
			if (lX4 | lY4) {
				if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
				else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
			} else {
				return (lResult ^ lX8 ^ lY8);
			}
		}
	var F = function(x, y, z) {
		return (x & y) | ((~ x) & z);	
	}			
	var G = function(x, y, z) {
		return (x & z) | (y & (~ z));	
	}				
	var H = function(x, y, z) {	
		return (x ^ y ^ z);	
	}		
	var I = function(x, y, z) {		
	return (y ^ (x | (~ z)));
	}		
	var FF = function(a, b, c, d, x, s, ac) {	
		a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));
		return addUnsigned(rotateLeft(a, s), b);	
	};			
	var GG = function(a, b, c, d, x, s, ac) {		
		a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));	
		return addUnsigned(rotateLeft(a, s), b);
	};	
	var HH = function(a, b, c, d, x, s, ac) {
		a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));
		return addUnsigned(rotateLeft(a, s), b);	
	};	
	var II = function(a, b, c, d, x, s, ac) {	
		a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));
		return addUnsigned(rotateLeft(a, s), b);
	};
	var convertToWordArray = function(string) {
		var lWordCount;	
		var lMessageLength = string.length;	
		var lNumberOfWordsTempOne = lMessageLength + 8;	
		var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64;	
		var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16;	
		var lWordArray = Array(lNumberOfWords - 1);	
		var lBytePosition = 0;
		var lByteCount = 0;	
		while (lByteCount < lMessageLength) {	
			lWordCount = (lByteCount - (lByteCount % 4)) / 4;	
			lBytePosition = (lByteCount % 4) * 8;	
			lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
			lByteCount++;	
		}
		lWordCount = (lByteCount - (lByteCount % 4)) / 4;	
		lBytePosition = (lByteCount % 4) * 8;	
		lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
		lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
		lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
		return lWordArray;
	};
	var wordToHex = function(lValue) {
		var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount;
		for (lCount = 0; lCount <= 3; lCount++) {
			lByte = (lValue >>> (lCount * 8)) & 255;
			WordToHexValueTemp = "0" + lByte.toString(16);
			WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2);
		}
		return WordToHexValue;
	};
	var uTF8Encode = function(string) {
		string = string.toString().replace(/\x0d\x0a/g, "\x0a");
		var output = "";
		for (var n = 0; n < string.length; n++) {	
			var c = string.charCodeAt(n);
			if (c < 128) {	
				output += String.fromCharCode(c);
			} else if ((c > 127) && (c < 2048)) {
				output += String.fromCharCode((c >> 6) | 192);
				output += String.fromCharCode((c & 63) | 128);
			} else {
				output += String.fromCharCode((c >> 12) | 224);	
				output += String.fromCharCode(((c >> 6) & 63) | 128);
				output += String.fromCharCode((c & 63) | 128);	
			}
		}
		return output;
	};	
})

Related recommendations:

A simple way to implement MD5 encryption with jQuery

MD5 encryption method in JS

How to use md5 encryption in js

The above is the detailed content of js implements md5 encryption plug-in code sharing. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn