v12345 发表于 2017-5-2 00:27:19

md5加密的js改写,求教!

/**
       * jQuery MD5 hash algorithm function
       *
       *        
       *                 Calculate the md5 hash of a String
       *                 String $.md5 ( String str )
       *        
       *
       * Calculates the MD5 hash of str using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash.
       * MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of data. The generated hash is also non-reversable. Data cannot be retrieved from the message digest, the digest uniquely identifies the data.
       * MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1.
       * This script is used to process a variable length message into a fixed-length output of 128 bits using the MD5 algorithm. It is fully compatible with UTF-8 encoding. It is very useful when u want to transfer encrypted passwords over the internet. If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag).
       * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.
       *
       * Example
       *         Code
       *                
       *                         $.md5("I'm Persian.");
       *                
       *         Result
       *                
       *                         "b8c901d0f02223f9761016cfff9d68df"
       *                
       *
       * @alias Muhammad Hussein Fattahizadeh < muhammad semnanweb com >
       * @link http://www.semnanweb.com/jquery-plugin/md5.html
       * @see http://www.webtoolkit.info/
       * @license http://www.gnu.org/licenses/gpl.html
       * @param {jQuery} {md5:function(string))
       * @return string
       */

(function($) {
   
    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 = (lWordArray | (string.charCodeAt(lByteCount) << lBytePosition));
            lByteCount++;
      }
      lWordCount = (lByteCount - (lByteCount % 4)) / 4;
      lBytePosition = (lByteCount % 4) * 8;
      lWordArray = lWordArray | (0x80 << lBytePosition);
      lWordArray = lMessageLength << 3;
      lWordArray = 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;
    }
    ;
   
    $.extend({
      md5: 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 = 0x98BAD*FE;
            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, S11, 0xD76AA478);
                d = FF(d, a, b, c, x, S12, 0xE8C7B756);
                c = FF(c, d, a, b, x, S13, 0x242070DB);
                b = FF(b, c, d, a, x, S14, 0xC1BDCEEE);
                a = FF(a, b, c, d, x, S11, 0xF57C0FAF);
                d = FF(d, a, b, c, x, S12, 0x4787C62A);
                c = FF(c, d, a, b, x, S13, 0xA8304613);
                b = FF(b, c, d, a, x, S14, 0xFD469501);
                a = FF(a, b, c, d, x, S11, 0x698098D8);
                d = FF(d, a, b, c, x, S12, 0x8B44F7AF);
                c = FF(c, d, a, b, x, S13, 0xFFFF5BB1);
                b = FF(b, c, d, a, x, S14, 0x895CD7BE);
                a = FF(a, b, c, d, x, S11, 0x6B901122);
                d = FF(d, a, b, c, x, S12, 0xFD987193);
                c = FF(c, d, a, b, x, S13, 0xA679438E);
                b = FF(b, c, d, a, x, S14, 0x49B40821);
                a = GG(a, b, c, d, x, S21, 0xF61E2562);
                d = GG(d, a, b, c, x, S22, 0xC040B340);
                c = GG(c, d, a, b, x, S23, 0x265E5A51);
                b = GG(b, c, d, a, x, S24, 0xE9B6C7AA);
                a = GG(a, b, c, d, x, S21, 0xD62F105D);
                d = GG(d, a, b, c, x, S22, 0x2441453);
                c = GG(c, d, a, b, x, S23, 0xD8A1E681);
                b = GG(b, c, d, a, x, S24, 0xE7D3FBC8);
                a = GG(a, b, c, d, x, S21, 0x21E1CDE6);
                d = GG(d, a, b, c, x, S22, 0xC33707D6);
                c = GG(c, d, a, b, x, S23, 0xF4D50D87);
                b = GG(b, c, d, a, x, S24, 0x455A14ED);
                a = GG(a, b, c, d, x, S21, 0xA9E3E905);
                d = GG(d, a, b, c, x, S22, 0xFCEFA3F8);
                c = GG(c, d, a, b, x, S23, 0x676F02D9);
                b = GG(b, c, d, a, x, S24, 0x8D2A4C8A);
                a = HH(a, b, c, d, x, S31, 0xFFFA3942);
                d = HH(d, a, b, c, x, S32, 0x8771F681);
                c = HH(c, d, a, b, x, S33, 0x6D9D6122);
                b = HH(b, c, d, a, x, S34, 0xFDE5380C);
                a = HH(a, b, c, d, x, S31, 0xA4BEEA44);
                d = HH(d, a, b, c, x, S32, 0x4BDE*FA9);
                c = HH(c, d, a, b, x, S33, 0xF6BB4B60);
                b = HH(b, c, d, a, x, S34, 0xBEBFBC70);
                a = HH(a, b, c, d, x, S31, 0x289B7EC6);
                d = HH(d, a, b, c, x, S32, 0xEAA127FA);
                c = HH(c, d, a, b, x, S33, 0xD4EF3085);
                b = HH(b, c, d, a, x, S34, 0x4881D05);
                a = HH(a, b, c, d, x, S31, 0xD9D4D039);
                d = HH(d, a, b, c, x, S32, 0xE6DB99E5);
                c = HH(c, d, a, b, x, S33, 0x1FA27*F8);
                b = HH(b, c, d, a, x, S34, 0xC4AC5665);
                a = II(a, b, c, d, x, S41, 0xF4292244);
                d = II(d, a, b, c, x, S42, 0x432AFF97);
                c = II(c, d, a, b, x, S43, 0xAB9423A7);
                b = II(b, c, d, a, x, S44, 0xFC93A039);
                a = II(a, b, c, d, x, S41, 0x655B59C3);
                d = II(d, a, b, c, x, S42, 0x8F0CCC92);
                c = II(c, d, a, b, x, S43, 0xFFEFF47D);
                b = II(b, c, d, a, x, S44, 0x85845DD1);
                a = II(a, b, c, d, x, S41, 0x6FA87E4F);
                d = II(d, a, b, c, x, S42, 0xFE2CE6E0);
                c = II(c, d, a, b, x, S43, 0xA3014314);
                b = II(b, c, d, a, x, S44, 0x4E0811A1);
                a = II(a, b, c, d, x, S41, 0xF7537E82);
                d = II(d, a, b, c, x, S42, 0xBD3AF235);
                c = II(c, d, a, b, x, S43, 0x2AD7D2BB);
                b = II(b, c, d, a, x, 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();
      }
    });
})(jQuery);

密码:v12345
加密结果:682324b7ac854a5ad7db003c2a860f8d

揰掵佲 发表于 2017-5-2 00:27:20

MD5的,其实内置有一个,所有的MD5都是一样的,直接取数据摘要就可以了。不过非要改的话,也可以改。

jQuery={};
(function($) {
    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 = (lWordArray | (string.charCodeAt(lByteCount) << lBytePosition));
            lByteCount++;
      }
      lWordCount = (lByteCount - (lByteCount % 4)) / 4;
      lBytePosition = (lByteCount % 4) * 8;
      lWordArray = lWordArray | (0x80 << lBytePosition);
      lWordArray = lMessageLength << 3;
      lWordArray = 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;
    };

      md5=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 = 0x98BAD*FE;
            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, S11, 0xD76AA478);
                d = FF(d, a, b, c, x, S12, 0xE8C7B756);
                c = FF(c, d, a, b, x, S13, 0x242070DB);
                b = FF(b, c, d, a, x, S14, 0xC1BDCEEE);
                a = FF(a, b, c, d, x, S11, 0xF57C0FAF);
                d = FF(d, a, b, c, x, S12, 0x4787C62A);
                c = FF(c, d, a, b, x, S13, 0xA8304613);
                b = FF(b, c, d, a, x, S14, 0xFD469501);
                a = FF(a, b, c, d, x, S11, 0x698098D8);
                d = FF(d, a, b, c, x, S12, 0x8B44F7AF);
                c = FF(c, d, a, b, x, S13, 0xFFFF5BB1);
                b = FF(b, c, d, a, x, S14, 0x895CD7BE);
                a = FF(a, b, c, d, x, S11, 0x6B901122);
                d = FF(d, a, b, c, x, S12, 0xFD987193);
                c = FF(c, d, a, b, x, S13, 0xA679438E);
                b = FF(b, c, d, a, x, S14, 0x49B40821);
                a = GG(a, b, c, d, x, S21, 0xF61E2562);
                d = GG(d, a, b, c, x, S22, 0xC040B340);
                c = GG(c, d, a, b, x, S23, 0x265E5A51);
                b = GG(b, c, d, a, x, S24, 0xE9B6C7AA);
                a = GG(a, b, c, d, x, S21, 0xD62F105D);
                d = GG(d, a, b, c, x, S22, 0x2441453);
                c = GG(c, d, a, b, x, S23, 0xD8A1E681);
                b = GG(b, c, d, a, x, S24, 0xE7D3FBC8);
                a = GG(a, b, c, d, x, S21, 0x21E1CDE6);
                d = GG(d, a, b, c, x, S22, 0xC33707D6);
                c = GG(c, d, a, b, x, S23, 0xF4D50D87);
                b = GG(b, c, d, a, x, S24, 0x455A14ED);
                a = GG(a, b, c, d, x, S21, 0xA9E3E905);
                d = GG(d, a, b, c, x, S22, 0xFCEFA3F8);
                c = GG(c, d, a, b, x, S23, 0x676F02D9);
                b = GG(b, c, d, a, x, S24, 0x8D2A4C8A);
                a = HH(a, b, c, d, x, S31, 0xFFFA3942);
                d = HH(d, a, b, c, x, S32, 0x8771F681);
                c = HH(c, d, a, b, x, S33, 0x6D9D6122);
                b = HH(b, c, d, a, x, S34, 0xFDE5380C);
                a = HH(a, b, c, d, x, S31, 0xA4BEEA44);
                d = HH(d, a, b, c, x, S32, 0x4BDE*FA9);
                c = HH(c, d, a, b, x, S33, 0xF6BB4B60);
                b = HH(b, c, d, a, x, S34, 0xBEBFBC70);
                a = HH(a, b, c, d, x, S31, 0x289B7EC6);
                d = HH(d, a, b, c, x, S32, 0xEAA127FA);
                c = HH(c, d, a, b, x, S33, 0xD4EF3085);
                b = HH(b, c, d, a, x, S34, 0x4881D05);
                a = HH(a, b, c, d, x, S31, 0xD9D4D039);
                d = HH(d, a, b, c, x, S32, 0xE6DB99E5);
                c = HH(c, d, a, b, x, S33, 0x1FA27*F8);
                b = HH(b, c, d, a, x, S34, 0xC4AC5665);
                a = II(a, b, c, d, x, S41, 0xF4292244);
                d = II(d, a, b, c, x, S42, 0x432AFF97);
                c = II(c, d, a, b, x, S43, 0xAB9423A7);
                b = II(b, c, d, a, x, S44, 0xFC93A039);
                a = II(a, b, c, d, x, S41, 0x655B59C3);
                d = II(d, a, b, c, x, S42, 0x8F0CCC92);
                c = II(c, d, a, b, x, S43, 0xFFEFF47D);
                b = II(b, c, d, a, x, S44, 0x85845DD1);
                a = II(a, b, c, d, x, S41, 0x6FA87E4F);
                d = II(d, a, b, c, x, S42, 0xFE2CE6E0);
                c = II(c, d, a, b, x, S43, 0xA3014314);
                b = II(b, c, d, a, x, S44, 0x4E0811A1);
                a = II(a, b, c, d, x, S41, 0xF7537E82);
                d = II(d, a, b, c, x, S42, 0xBD3AF235);
                c = II(c, d, a, b, x, S43, 0x2AD7D2BB);
                b = II(b, c, d, a, x, 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();
      }

})(jQuery);

v12345 发表于 2017-5-2 00:42:07

密码:v12345B
加密结果:6a45cdcb2977f6354e0a61e0dd7ac9aa

密码:v12345B@8
加密结果:21c5b09ab95dc29bd177ed609b070e9a

v12345 发表于 2017-5-2 01:27:08

乐易运营 发表于 2017-5-2 00:54
MD5的,其实内置有一个,所有的MD5都是一样的,直接取数据摘要就可以了。不过非要改的话,也可以改。

取数据摘要计算出来的结果和他这个结果不一样,当密码中包含 大写字母 与 特殊字符时(@#)

v12345 发表于 2017-5-2 01:29:33

乐易运营 发表于 2017-5-2 00:54
MD5的,其实内置有一个,所有的MD5都是一样的,直接取数据摘要就可以了。不过非要改的话,也可以改。

这样修改后,进行调用计算的结果不对,例如,密码:v12345B@8
加密结果:21c5b09ab95dc29bd177ed609b070e9a
但是这个修改后调用计算的结果却不是

v12345 发表于 2017-5-2 01:30:23

乐易运营 发表于 2017-5-2 00:54
MD5的,其实内置有一个,所有的MD5都是一样的,直接取数据摘要就可以了。不过非要改的话,也可以改。

http://www.360doc.com/login.aspx   这个登录的密码加密

揰掵佲 发表于 2017-5-2 04:59:58

v12345 发表于 2017-5-2 01:30
http://www.360doc.com/login.aspx   这个登录的密码加密

一样的,转换为小写就可以了。你没转换,加密的都要到小写
页: [1]
查看完整版本: md5加密的js改写,求教!