js md5 过滤表情 数据签名

		 //字符编码数值对应的存储长度:
		 //UCS-2编码(16进制) UTF-8 字节流(二进制)
		 //0000 - 007F       0xxxxxxx (1字节)
		 //0080 - 07FF       110xxxxx 10xxxxxx (2字节)
		 //0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx (3字节)
		 function getBytesLength(str) {
		     var totalLength = 0;
		     var charCode;
		     for (var i = 0; i < str.length; i++) {
		         charCode = str.charCodeAt(i);
		         if (charCode < 0x007f)  {
		             totalLength++;
		         } else if ((0x0080 <= charCode) && (charCode <= 0x07ff))  {
		             totalLength += 2;
		         } else if ((0x0800 <= charCode) && (charCode <= 0xffff))  {
		             totalLength += 3;
		         } else{
		             totalLength += 4;
		         }
		     }
		     return totalLength;
		 }



		//参数签名
		function sign(data){
			var strParams = '';
			if(!data == ''){
				var data = this.ksorts(data);
				for (var item in data) {
				  var strs = '';
				  if(typeof(data[item]) == 'string'){
					  var str = data[item];
					  for(let cc of str){
						  var len = this.getBytesLength(cc);
						  if(len < 6){
							  strs+=String(cc);
						  }					  
					  }
				  }else{
					 strs = data[item]; 
				  }
				  var res = item + '=' + strs + '&';
				  strParams += res;
				}
				strParams = strParams.substr(0, strParams.length - 1);
			}
			strParams = strParams + 'secret';
			// strParams = this.utf8(strParams);//有的md5 js 不带utf8转码需自己转码
			let secret= md5.md5(strParams);
			return secret;
		 }



		//转码 uft8
		 function utf8(inputStr) {
		  var outputStr = "";
		  for (var i = 0; i < inputStr.length; i++) {
			var temp = inputStr.charCodeAt(i);
			//0xxxxxxx
			if (temp < 128) {
			  outputStr += String.fromCharCode(temp);
			}
			//110xxxxx 10xxxxxx
			else if (temp < 2048) {
			  outputStr += String.fromCharCode((temp >> 6) | 192);
			  outputStr += String.fromCharCode((temp & 63) | 128);
			}
			//1110xxxx 10xxxxxx 10xxxxxx
			else if (temp < 65536) {
			  outputStr += String.fromCharCode((temp >> 12) | 224);
			  outputStr += String.fromCharCode(((temp >> 6) & 63) | 128);
			  outputStr += String.fromCharCode((temp & 63) | 128);
			}
			//11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
			else {
			  outputStr += String.fromCharCode((temp >> 18) | 240);
			  outputStr += String.fromCharCode(((temp >> 12) & 63) | 128);
			  outputStr += String.fromCharCode(((temp >> 6) & 63) | 128);
			  outputStr += String.fromCharCode((temp & 63) | 128);
			}
		  }
		  return outputStr;
		}

		//排序函数
		function ksorts(inputArr) {
		 	var tmp_arr = {},
		 	  keys = [],
		 	  sorter, i, k, that = this,
		 	  strictForIn = false,
		 	  populateArr = {};
		 	sorter = function (a, b) {
		 	  var aFloat = parseFloat(a),
		 	    bFloat = parseFloat(b),
		 	    aNumeric = aFloat + '' === a,
		 	    bNumeric = bFloat + '' === b;
		 	  if (aNumeric && bNumeric) {
		 	    return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0;
		 	  } else if (aNumeric && !bNumeric) {
		 	    return 1;
		 	  } else if (!aNumeric && bNumeric) {
		 	    return -1;
		 	  }
		 	  return a > b ? 1 : a < b ? -1 : 0;
		 	};
		 	// Make a list of key names
		 	for (k in inputArr) {
		 	  if (inputArr.hasOwnProperty(k)) {
		 	    keys.push(k);
		 	  }
		 	}
		 	keys.sort(sorter);
		 	// Rebuild array with sorted key names
		 	for (i = 0; i < keys.length; i++) {
		 	  k = keys[i];
		 	  tmp_arr[k] = inputArr[k];
		 	}
		 	for (i in tmp_arr) {
		 	  if (tmp_arr.hasOwnProperty(i)) {
		 	    populateArr[i] = tmp_arr[i];
		 	  }
		 	}
		 	return populateArr;
		 }
//md5.js
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.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; 
}; 
     
function md5(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(); 
} 
     
module.exports.md5 = md5

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值