fastmd5

Benchmark created by iReal on


Preparation HTML

<script>
(function () {
        md5old = function (string) {

                function cmn(q, a, b, x, s, t) {
                        a = add32(add32(a, q), add32(x, t));
                        return add32((a << s) | (a >>> (32 - s)), b);
                }


                function ff(a, b, c, d, x, s, t) {
                        return cmn((b & c) | ((~b) & d), a, b, x, s, t);
                }

                function gg(a, b, c, d, x, s, t) {
                        return cmn((b & d) | (c & (~d)), a, b, x, s, t);
                }

                function hh(a, b, c, d, x, s, t) {
                        return cmn(b ^ c ^ d, a, b, x, s, t);
                }

                function ii(a, b, c, d, x, s, t) {
                        return cmn(c ^ (b | (~d)), a, b, x, s, t);
                }



                function md5cycle(x, k) {
                        var a = x[0], b = x[1], c = x[2], d = x[3];

                        a = ff(a, b, c, d, k[0], 7, -680876936);
                        d = ff(d, a, b, c, k[1], 12, -389564586);
                        c = ff(c, d, a, b, k[2], 17,  606105819);
                        b = ff(b, c, d, a, k[3], 22, -1044525330);
                        a = ff(a, b, c, d, k[4], 7, -176418897);
                        d = ff(d, a, b, c, k[5], 12,  1200080426);
                        c = ff(c, d, a, b, k[6], 17, -1473231341);
                        b = ff(b, c, d, a, k[7], 22, -45705983);
                        a = ff(a, b, c, d, k[8], 7,  1770035416);
                        d = ff(d, a, b, c, k[9], 12, -1958414417);
                        c = ff(c, d, a, b, k[10], 17, -42063);
                        b = ff(b, c, d, a, k[11], 22, -1990404162);
                        a = ff(a, b, c, d, k[12], 7,  1804603682);
                        d = ff(d, a, b, c, k[13], 12, -40341101);
                        c = ff(c, d, a, b, k[14], 17, -1502002290);
                        b = ff(b, c, d, a, k[15], 22,  1236535329);

                        a = gg(a, b, c, d, k[1], 5, -165796510);
                        d = gg(d, a, b, c, k[6], 9, -1069501632);
                        c = gg(c, d, a, b, k[11], 14,  643717713);
                        b = gg(b, c, d, a, k[0], 20, -373897302);
                        a = gg(a, b, c, d, k[5], 5, -701558691);
                        d = gg(d, a, b, c, k[10], 9,  38016083);
                        c = gg(c, d, a, b, k[15], 14, -660478335);
                        b = gg(b, c, d, a, k[4], 20, -405537848);
                        a = gg(a, b, c, d, k[9], 5,  568446438);
                        d = gg(d, a, b, c, k[14], 9, -1019803690);
                        c = gg(c, d, a, b, k[3], 14, -187363961);
                        b = gg(b, c, d, a, k[8], 20,  1163531501);
                        a = gg(a, b, c, d, k[13], 5, -1444681467);
                        d = gg(d, a, b, c, k[2], 9, -51403784);
                        c = gg(c, d, a, b, k[7], 14,  1735328473);
                        b = gg(b, c, d, a, k[12], 20, -1926607734);

                        a = hh(a, b, c, d, k[5], 4, -378558);
                        d = hh(d, a, b, c, k[8], 11, -2022574463);
                        c = hh(c, d, a, b, k[11], 16,  1839030562);
                        b = hh(b, c, d, a, k[14], 23, -35309556);
                        a = hh(a, b, c, d, k[1], 4, -1530992060);
                        d = hh(d, a, b, c, k[4], 11,  1272893353);
                        c = hh(c, d, a, b, k[7], 16, -155497632);
                        b = hh(b, c, d, a, k[10], 23, -1094730640);
                        a = hh(a, b, c, d, k[13], 4,  681279174);
                        d = hh(d, a, b, c, k[0], 11, -358537222);
                        c = hh(c, d, a, b, k[3], 16, -722521979);
                        b = hh(b, c, d, a, k[6], 23,  76029189);
                        a = hh(a, b, c, d, k[9], 4, -640364487);
                        d = hh(d, a, b, c, k[12], 11, -421815835);
                        c = hh(c, d, a, b, k[15], 16,  530742520);
                        b = hh(b, c, d, a, k[2], 23, -995338651);

                        a = ii(a, b, c, d, k[0], 6, -198630844);
                        d = ii(d, a, b, c, k[7], 10,  1126891415);
                        c = ii(c, d, a, b, k[14], 15, -1416354905);
                        b = ii(b, c, d, a, k[5], 21, -57434055);
                        a = ii(a, b, c, d, k[12], 6,  1700485571);
                        d = ii(d, a, b, c, k[3], 10, -1894986606);
                        c = ii(c, d, a, b, k[10], 15, -1051523);
                        b = ii(b, c, d, a, k[1], 21, -2054922799);
                        a = ii(a, b, c, d, k[8], 6,  1873313359);
                        d = ii(d, a, b, c, k[15], 10, -30611744);
                        c = ii(c, d, a, b, k[6], 15, -1560198380);
                        b = ii(b, c, d, a, k[13], 21,  1309151649);
                        a = ii(a, b, c, d, k[4], 6, -145523070);
                        d = ii(d, a, b, c, k[11], 10, -1120210379);
                        c = ii(c, d, a, b, k[2], 15,  718787259);
                        b = ii(b, c, d, a, k[9], 21, -343485551);

                        x[0] = add32(a, x[0]);
                        x[1] = add32(b, x[1]);
                        x[2] = add32(c, x[2]);
                        x[3] = add32(d, x[3]);

                }


                function md51(s) {
                        txt = '';
                        var n = s.length,
                        state = [1732584193, -271733879, -1732584194, 271733878], i;
                        for (i=64; i<=n; i+=64) {
                                md5cycle(state, md5blk(s.substring(i-64, i)));
                        }
                        s = s.substring(i-64);
                        var tail = [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], sl=s.length;
                        for (i=0; i<sl; ++i)    tail[i>>2] |= s.charCodeAt(i) << ((i%4) << 3);
                        tail[i>>2] |= 0x80 << ((i%4) << 3);
                        if (i > 55) {
                                md5cycle(state, tail);
                                i=16;
                                while (i--) { tail[i] = 0 }
                        }
                        tail[14] = n*8;
                        md5cycle(state, tail);
                        return state;
                }


                function md5blk(s) {
                        var md5blks = [], i;
                        for (i=0; i<64; i+=4) {
                        md5blks[i>>2] = s.charCodeAt(i)
                        + (s.charCodeAt(i+1) << 8)
                        + (s.charCodeAt(i+2) << 16)
                        + (s.charCodeAt(i+3) << 24);
                        }
                        return md5blks;
                }

                var hex_chr = '0123456789abcdef'.split('');

                function rhex(n)
                {
                        var s='', j=0;
                        for(; j<4; ++j) s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];
                        return s;
                }

                function hex(x) {
                        var l=x.length;
                        for (var i=0; i<l; ++i) x[i] = rhex(x[i]);
                        return x.join('');
                }

                function add32(a, b) {
                        return (a + b) & 0xFFFFFFFF;
                }

                if (hex(md51('hello')) != '5d41402abc4b2a76b9719d911017c592') {
                        function add32(x, y) {
                                var lsw = (x & 0xFFFF) + (y & 0xFFFF),
                                msw = (x >> 16) + (y >> 16) + (lsw >> 16);
                                return (msw << 16) | (lsw & 0xFFFF);
                        }
                }

                return hex(md51(string));
        }       
})()
</script>

<script>
md5 = {
 cmn: function(q, a, b, x, s, t) {
  a += q + x + t;
  return ((a << s | a >>> 32 - s) + b) & 4294967295; // 0xFFFFFFFF
 },
 hash: function(s) {
  var c16 = "0123456789abcdef",
        r = md5.md51(s),
      res = "";

  // convert to hex
  for(var i = 0;i < 4;++i) {
   res += c16[r[i] >> 4 & 15];
   res += c16[r[i] & 15];
   res += c16[r[i] >> 12 & 15];
   res += c16[r[i] >> 8 & 15];
   res += c16[r[i] >> 20 & 15];
   res += c16[r[i] >> 16 & 15];
   res += c16[r[i] >> 28 & 15];
   res += c16[r[i] >> 24 & 15];
  }

  return res;
 },
 md5cycle: function(k) {
  // standard cycle function
  // ----------------------------------------------------------------------
  // ------------------      a           b            c           d      k
  // ----------------------------------------------------------------------
  var r = md5.md5_rounds(1732584193, -271733879, -1732584194, 271733878, k);

  return [
   (r[0] + 1732584193) & 4294967295,
   (r[1] - 271733879) & 4294967295,
   (r[2] - 1732584194) & 4294967295,
   (r[3] + 271733878) & 4294967295
  ];
 },
 md5cycleAdd: function(k, x) {
  // custom cycle function (additive)
  // if separate, then cycles work faster,
  // cause there is no need to check typeof x

  // ----------------------------------------------
  // ------------------   a     b     c     d    k
  // ----------------------------------------------
  var r = md5.md5_rounds(x[0], x[1], x[2], x[3], k);

  return [
   (r[0] + x[0]) & 4294967295,
   (r[1] + x[1]) & 4294967295,
   (r[2] + x[2]) & 4294967295,
   (r[3] + x[3]) & 4294967295
  ];
 },
 md5_rounds: function(a, b, c, d, k) {
  // 1 round FF
  a = md5.cmn((b & c) | (~b & d), a, b, k[0], 7, -680876936);
  d = md5.cmn((a & b) | (~a & c), d, a, k[1], 12, -389564586);
  c = md5.cmn((d & a) | (~d & b), c, d, k[2], 17, 606105819);
  b = md5.cmn((c & d) | (~c & a), b, c, k[3], 22, -1044525330);
  a = md5.cmn((b & c) | (~b & d), a, b, k[4], 7, -176418897);
  d = md5.cmn((a & b) | (~a & c), d, a, k[5], 12, 1200080426);
  c = md5.cmn((d & a) | (~d & b), c, d, k[6], 17, -1473231341);
  b = md5.cmn((c & d) | (~c & a), b, c, k[7], 22, -45705983);
  a = md5.cmn((b & c) | (~b & d), a, b, k[8], 7, 1770035416);
  d = md5.cmn((a & b) | (~a & c), d, a, k[9], 12, -1958414417);
  c = md5.cmn((d & a) | (~d & b), c, d, k[10], 17, -42063);
  b = md5.cmn((c & d) | (~c & a), b, c, k[11], 22, -1990404162);
  a = md5.cmn((b & c) | (~b & d), a, b, k[12], 7, 1804603682);
  d = md5.cmn((a & b) | (~a & c), d, a, k[13], 12, -40341101);
  c = md5.cmn((d & a) | (~d & b), c, d, k[14], 17, -1502002290);
  b = md5.cmn((c & d) | (~c & a), b, c, k[15], 22, 1236535329);

  // 2 round GG
  a = md5.cmn((b & d) | (c & ~d), a, b, k[1], 5, -165796510);
  d = md5.cmn((a & c) | (b & ~c), d, a, k[6], 9, -1069501632);
  c = md5.cmn((d & b) | (a & ~b), c, d, k[11], 14, 643717713);
  b = md5.cmn((c & a) | (d & ~a), b, c, k[0], 20, -373897302);
  a = md5.cmn((b & d) | (c & ~d), a, b, k[5], 5, -701558691);
  d = md5.cmn((a & c) | (b & ~c), d, a, k[10], 9, 38016083);
  c = md5.cmn((d & b) | (a & ~b), c, d, k[15], 14, -660478335);
  b = md5.cmn((c & a) | (d & ~a), b, c, k[4], 20, -405537848);
  a = md5.cmn((b & d) | (c & ~d), a, b, k[9], 5, 568446438);
  d = md5.cmn((a & c) | (b & ~c), d, a, k[14], 9, -1019803690);
  c = md5.cmn((d & b) | (a & ~b), c, d, k[3], 14, -187363961);
  b = md5.cmn((c & a) | (d & ~a), b, c, k[8], 20, 1163531501);
  a = md5.cmn((b & d) | (c & ~d), a, b, k[13], 5, -1444681467);
  d = md5.cmn((a & c) | (b & ~c), d, a, k[2], 9, -51403784);
  c = md5.cmn((d & b) | (a & ~b), c, d, k[7], 14, 1735328473);
  b = md5.cmn((c & a) | (d & ~a), b, c, k[12], 20, -1926607734);

  // 3 round HH
  a = md5.cmn(b ^ c ^ d, a, b, k[5], 4, -378558);
  d = md5.cmn(a ^ b ^ c, d, a, k[8], 11, -2022574463);
  c = md5.cmn(d ^ a ^ b, c, d, k[11], 16, 1839030562);
  b = md5.cmn(c ^ d ^ a, b, c, k[14], 23, -35309556);
  a = md5.cmn(b ^ c ^ d, a, b, k[1], 4, -1530992060);
  d = md5.cmn(a ^ b ^ c, d, a, k[4], 11, 1272893353);
  c = md5.cmn(d ^ a ^ b, c, d, k[7], 16, -155497632);
  b = md5.cmn(c ^ d ^ a, b, c, k[10], 23, -1094730640);
  a = md5.cmn(b ^ c ^ d, a, b, k[13], 4, 681279174);
  d = md5.cmn(a ^ b ^ c, d, a, k[0], 11, -358537222);
  c = md5.cmn(d ^ a ^ b, c, d, k[3], 16, -722521979);
  b = md5.cmn(c ^ d ^ a, b, c, k[6], 23, 76029189);
  a = md5.cmn(b ^ c ^ d, a, b, k[9], 4, -640364487);
  d = md5.cmn(a ^ b ^ c, d, a, k[12], 11, -421815835);
  c = md5.cmn(d ^ a ^ b, c, d, k[15], 16, 530742520);
  b = md5.cmn(c ^ d ^ a, b, c, k[2], 23, -995338651);

  // 4 round II
  a = md5.cmn(c ^ (b | ~d), a, b, k[0], 6, -198630844);
  d = md5.cmn(b ^ (a | ~c), d, a, k[7], 10, 1126891415);
  c = md5.cmn(a ^ (d | ~b), c, d, k[14], 15, -1416354905);
  b = md5.cmn(d ^ (c | ~a), b, c, k[5], 21, -57434055);
  a = md5.cmn(c ^ (b | ~d), a, b, k[12], 6, 1700485571);
  d = md5.cmn(b ^ (a | ~c), d, a, k[3], 10, -1894986606);
  c = md5.cmn(a ^ (d | ~b), c, d, k[10], 15, -1051523);
  b = md5.cmn(d ^ (c | ~a), b, c, k[1], 21, -2054922799);
  a = md5.cmn(c ^ (b | ~d), a, b, k[8], 6, 1873313359);
  d = md5.cmn(b ^ (a | ~c), d, a, k[15], 10, -30611744);
  c = md5.cmn(a ^ (d | ~b), c, d, k[6], 15, -1560198380);
  b = md5.cmn(d ^ (c | ~a), b, c, k[13], 21, 1309151649);
  a = md5.cmn(c ^ (b | ~d), a, b, k[4], 6, -145523070);
  d = md5.cmn(b ^ (a | ~c), d, a, k[11], 10, -1120210379);
  c = md5.cmn(a ^ (d | ~b), c, d, k[2], 15, 718787259);
  b = md5.cmn(d ^ (c | ~a), b, c, k[9], 21, -343485551);

  return [a, b, c, d];
 },
 md51: function(s) {
  var n = s.length,
   tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  state = 0;

  for(var i = 64;i <= n;i += 64) {
   state = md5.md5cycle(md5.md5blk(s.substring(i - 64, i)));
  }

  if(i > 64) {
   s = s.substring(i - 64);
  }

  var sl = s.length;

  for(i = 0;i < sl;++i) {
   tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
  }
  tail[i >> 2] |= 128 << ((i % 4) << 3);

  if(i > 55) {
   state = md5.md5cycle(tail);
   i = 16;
   while(i--)
    tail[i] = 0;
  }

  tail[14] = n * 8;

  if(state == 0) {
   return md5.md5cycle(tail);
  }else{
   return md5.md5cycleAdd(tail, state);
  }
 },
 md5blk: function(s) {
  // runs only if s.length >= 64 and divides by 64
  var md5blks = [];
  for (var i = 0;i < 64;i += 4) {
   md5blks[i >> 2] = s.charCodeAt(i)
   + (s.charCodeAt(i+1) << 8)
   + (s.charCodeAt(i+2) << 16)
   + (s.charCodeAt(i+3) << 24);
  }
  return md5blks;
 }
};
</script>

<script>
var SparkMD5=function(){function h(f,d,b,a,c,e){d=k(k(d,f),k(a,e));return k(d<<c|d>>>32-c,b)}function g(f,d,b,a,c,e,g){return h(d&b|~d&a,f,d,c,e,g)}function i(f,d,b,a,c,e,g){return h(d&a|b&~a,f,d,c,e,g)}function j(f,d,b,a,c,e,g){return h(b^(d|~a),f,d,c,e,g)}function l(f,d){var b=f[0],a=f[1],c=f[2],e=f[3],b=g(b,a,c,e,d[0],7,-680876936),e=g(e,b,a,c,d[1],12,-389564586),c=g(c,e,b,a,d[2],17,606105819),a=g(a,c,e,b,d[3],22,-1044525330),b=g(b,a,c,e,d[4],7,-176418897),e=g(e,b,a,c,d[5],12,1200080426),c=g(c,
e,b,a,d[6],17,-1473231341),a=g(a,c,e,b,d[7],22,-45705983),b=g(b,a,c,e,d[8],7,1770035416),e=g(e,b,a,c,d[9],12,-1958414417),c=g(c,e,b,a,d[10],17,-42063),a=g(a,c,e,b,d[11],22,-1990404162),b=g(b,a,c,e,d[12],7,1804603682),e=g(e,b,a,c,d[13],12,-40341101),c=g(c,e,b,a,d[14],17,-1502002290),a=g(a,c,e,b,d[15],22,1236535329),b=i(b,a,c,e,d[1],5,-165796510),e=i(e,b,a,c,d[6],9,-1069501632),c=i(c,e,b,a,d[11],14,643717713),a=i(a,c,e,b,d[0],20,-373897302),b=i(b,a,c,e,d[5],5,-701558691),e=i(e,b,a,c,d[10],9,38016083),
c=i(c,e,b,a,d[15],14,-660478335),a=i(a,c,e,b,d[4],20,-405537848),b=i(b,a,c,e,d[9],5,568446438),e=i(e,b,a,c,d[14],9,-1019803690),c=i(c,e,b,a,d[3],14,-187363961),a=i(a,c,e,b,d[8],20,1163531501),b=i(b,a,c,e,d[13],5,-1444681467),e=i(e,b,a,c,d[2],9,-51403784),c=i(c,e,b,a,d[7],14,1735328473),a=i(a,c,e,b,d[12],20,-1926607734),b=h(a^c^e,b,a,d[5],4,-378558),e=h(b^a^c,e,b,d[8],11,-2022574463),c=h(e^b^a,c,e,d[11],16,1839030562),a=h(c^e^b,a,c,d[14],23,-35309556),b=h(a^c^e,b,a,d[1],4,-1530992060),e=h(b^a^c,e,
b,d[4],11,1272893353),c=h(e^b^a,c,e,d[7],16,-155497632),a=h(c^e^b,a,c,d[10],23,-1094730640),b=h(a^c^e,b,a,d[13],4,681279174),e=h(b^a^c,e,b,d[0],11,-358537222),c=h(e^b^a,c,e,d[3],16,-722521979),a=h(c^e^b,a,c,d[6],23,76029189),b=h(a^c^e,b,a,d[9],4,-640364487),e=h(b^a^c,e,b,d[12],11,-421815835),c=h(e^b^a,c,e,d[15],16,530742520),a=h(c^e^b,a,c,d[2],23,-995338651),b=j(b,a,c,e,d[0],6,-198630844),e=j(e,b,a,c,d[7],10,1126891415),c=j(c,e,b,a,d[14],15,-1416354905),a=j(a,c,e,b,d[5],21,-57434055),b=j(b,a,c,e,
d[12],6,1700485571),e=j(e,b,a,c,d[3],10,-1894986606),c=j(c,e,b,a,d[10],15,-1051523),a=j(a,c,e,b,d[1],21,-2054922799),b=j(b,a,c,e,d[8],6,1873313359),e=j(e,b,a,c,d[15],10,-30611744),c=j(c,e,b,a,d[6],15,-1560198380),a=j(a,c,e,b,d[13],21,1309151649),b=j(b,a,c,e,d[4],6,-145523070),e=j(e,b,a,c,d[11],10,-1120210379),c=j(c,e,b,a,d[2],15,718787259),a=j(a,c,e,b,d[9],21,-343485551);f[0]=k(b,f[0]);f[1]=k(a,f[1]);f[2]=k(c,f[2]);f[3]=k(e,f[3])}function n(f){var d=[],b;for(b=0;64>b;b+=4)d[b>>2]=f.charCodeAt(b)+
(f.charCodeAt(b+1)<<8)+(f.charCodeAt(b+2)<<16)+(f.charCodeAt(b+3)<<24);return d}function o(f){var d=f.length,b=[1732584193,-271733879,-1732584194,271733878],a,c,e;for(a=64;a<=d;a+=64)l(b,n(f.substring(a-64,a)));f=f.substring(a-64);c=f.length;e=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(a=0;a<c;a+=1)e[a>>2]|=f.charCodeAt(a)<<(a%4<<3);e[a>>2]|=128<<(a%4<<3);if(55<a){l(b,e);for(a=0;16>a;a+=1)e[a]=0}e[14]=8*d;l(b,e);return b}function m(f){var d;for(d=0;d<f.length;d+=1){for(var b=f,a=d,c=f[d],e="",g=void 0,
g=0;4>g;g+=1)e+=q[c>>8*g+4&15]+q[c>>8*g&15];b[a]=e}return f.join("")}var k=function(f,d){return f+d&4294967295},q="0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f".split(",");"5d41402abc4b2a76b9719d911017c592"!==m(o("hello"))&&(k=function(f,d){var b=(f&65535)+(d&65535);return(f>>16)+(d>>16)+(b>>16)<<16|b&65535});var p=function(){this.append=function(f){/[\u0080-\uFFFF]/.test(f)&&(f=unescape(encodeURIComponent(f)));this.appendBinary(f);return this};this.appendBinary=function(f){var d=64-this._buff.length,b=this._buff+
f.substr(0,d),a;this._length+=f.length;if(64<=b.length){l(this._state,n(b));for(a=f.length-64;d<=a;)b=f.substr(d,64),l(this._state,n(b)),d+=64;this._buff=f.substr(d,64)}else this._buff=b;return this};this.end=function(f){var d=this._buff,b=d.length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],c;for(c=0;c<b;c+=1)a[c>>2]|=d.charCodeAt(c)<<(c%4<<3);a[c>>2]|=128<<(c%4<<3);if(55<c){l(this._state,a);for(c=0;16>c;c+=1)a[c]=0}a[14]=8*this._length;l(this._state,a);f=f?this._state:m(this._state);this.reset();return f};
this.reset=function(){this._buff="";this._length=0;this._state=[1732584193,-271733879,-1732584194,271733878];return this};this.destroy=function(){delete this._state;delete this._buff;delete this._length};this.reset()};p.hash=function(f,d){/[\u0080-\uFFFF]/.test(f)&&(f=unescape(encodeURIComponent(f)));var b=o(f);return d?b:m(b)};p.hashBinary=function(f,d){var b=o(f);return d?b:m(b)};return p}();
var hasher = new SparkMD5();
spark_md5 = SparkMD5.hash;
spark_md5_binary = SparkMD5.hashBinary;
</script>

<script>
(typeof Crypto=="undefined"||!Crypto.util)&&function(){var m=window.Crypto={},o=m.util={rotl:function(h,g){return h<<g|h>>>32-g},rotr:function(h,g){return h<<32-g|h>>>g},endian:function(h){if(h.constructor==Number)return o.rotl(h,8)&16711935|o.rotl(h,24)&4278255360;for(var g=0;g<h.length;g++)h[g]=o.endian(h[g]);return h},randomBytes:function(h){for(var g=[];h>0;h--)g.push(Math.floor(Math.random()*256));return g},bytesToWords:function(h){for(var g=[],i=0,a=0;i<h.length;i++,a+=8)g[a>>>5]|=(h[i]&255)<<
24-a%32;return g},wordsToBytes:function(h){for(var g=[],i=0;i<h.length*32;i+=8)g.push(h[i>>>5]>>>24-i%32&255);return g},bytesToHex:function(h){for(var g=[],i=0;i<h.length;i++)g.push((h[i]>>>4).toString(16)),g.push((h[i]&15).toString(16));return g.join("")},hexToBytes:function(h){for(var g=[],i=0;i<h.length;i+=2)g.push(parseInt(h.substr(i,2),16));return g},bytesToBase64:function(h){if(typeof btoa=="function")return btoa(n.bytesToString(h));for(var g=[],i=0;i<h.length;i+=3)for(var a=h[i]<<16|h[i+1]<<
8|h[i+2],b=0;b<4;b++)i*8+b*6<=h.length*8?g.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(a>>>6*(3-b)&63)):g.push("=");return g.join("")},base64ToBytes:function(h){if(typeof atob=="function")return n.stringToBytes(atob(h));for(var h=h.replace(/[^A-Z0-9+\/]/ig,""),g=[],i=0,a=0;i<h.length;a=++i%4)a!=0&&g.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(h.charAt(i-1))&Math.pow(2,-2*a+8)-1)<<a*2|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(h.charAt(i))>>>
6-a*2);return g}},m=m.charenc={};m.UTF8={stringToBytes:function(h){return n.stringToBytes(unescape(encodeURIComponent(h)))},bytesToString:function(h){return decodeURIComponent(escape(n.bytesToString(h)))}};var n=m.Binary={stringToBytes:function(h){for(var g=[],i=0;i<h.length;i++)g.push(h.charCodeAt(i)&255);return g},bytesToString:function(h){for(var g=[],i=0;i<h.length;i++)g.push(String.fromCharCode(h[i]));return g.join("")}}}();
(function(){var m=Crypto,o=m.util,n=m.charenc,h=n.UTF8,g=n.Binary,i=m.MD5=function(a,b){var h=o.wordsToBytes(i._md5(a));return b&&b.asBytes?h:b&&b.asString?g.bytesToString(h):o.bytesToHex(h)};i._md5=function(a){a.constructor==String&&(a=h.stringToBytes(a));for(var b=o.bytesToWords(a),g=a.length*8,a=1732584193,d=-271733879,e=-1732584194,c=271733878,f=0;f<b.length;f++)b[f]=(b[f]<<8|b[f]>>>24)&16711935|(b[f]<<24|b[f]>>>8)&4278255360;b[g>>>5]|=128<<g%32;b[(g+64>>>9<<4)+14]=g;for(var g=i._ff,j=i._gg,k=
i._hh,l=i._ii,f=0;f<b.length;f+=16)var m=a,n=d,p=e,q=c,a=g(a,d,e,c,b[f+0],7,-680876936),c=g(c,a,d,e,b[f+1],12,-389564586),e=g(e,c,a,d,b[f+2],17,606105819),d=g(d,e,c,a,b[f+3],22,-1044525330),a=g(a,d,e,c,b[f+4],7,-176418897),c=g(c,a,d,e,b[f+5],12,1200080426),e=g(e,c,a,d,b[f+6],17,-1473231341),d=g(d,e,c,a,b[f+7],22,-45705983),a=g(a,d,e,c,b[f+8],7,1770035416),c=g(c,a,d,e,b[f+9],12,-1958414417),e=g(e,c,a,d,b[f+10],17,-42063),d=g(d,e,c,a,b[f+11],22,-1990404162),a=g(a,d,e,c,b[f+12],7,1804603682),c=g(c,a,
d,e,b[f+13],12,-40341101),e=g(e,c,a,d,b[f+14],17,-1502002290),d=g(d,e,c,a,b[f+15],22,1236535329),a=j(a,d,e,c,b[f+1],5,-165796510),c=j(c,a,d,e,b[f+6],9,-1069501632),e=j(e,c,a,d,b[f+11],14,643717713),d=j(d,e,c,a,b[f+0],20,-373897302),a=j(a,d,e,c,b[f+5],5,-701558691),c=j(c,a,d,e,b[f+10],9,38016083),e=j(e,c,a,d,b[f+15],14,-660478335),d=j(d,e,c,a,b[f+4],20,-405537848),a=j(a,d,e,c,b[f+9],5,568446438),c=j(c,a,d,e,b[f+14],9,-1019803690),e=j(e,c,a,d,b[f+3],14,-187363961),d=j(d,e,c,a,b[f+8],20,1163531501),
a=j(a,d,e,c,b[f+13],5,-1444681467),c=j(c,a,d,e,b[f+2],9,-51403784),e=j(e,c,a,d,b[f+7],14,1735328473),d=j(d,e,c,a,b[f+12],20,-1926607734),a=k(a,d,e,c,b[f+5],4,-378558),c=k(c,a,d,e,b[f+8],11,-2022574463),e=k(e,c,a,d,b[f+11],16,1839030562),d=k(d,e,c,a,b[f+14],23,-35309556),a=k(a,d,e,c,b[f+1],4,-1530992060),c=k(c,a,d,e,b[f+4],11,1272893353),e=k(e,c,a,d,b[f+7],16,-155497632),d=k(d,e,c,a,b[f+10],23,-1094730640),a=k(a,d,e,c,b[f+13],4,681279174),c=k(c,a,d,e,b[f+0],11,-358537222),e=k(e,c,a,d,b[f+3],16,-722521979),
d=k(d,e,c,a,b[f+6],23,76029189),a=k(a,d,e,c,b[f+9],4,-640364487),c=k(c,a,d,e,b[f+12],11,-421815835),e=k(e,c,a,d,b[f+15],16,530742520),d=k(d,e,c,a,b[f+2],23,-995338651),a=l(a,d,e,c,b[f+0],6,-198630844),c=l(c,a,d,e,b[f+7],10,1126891415),e=l(e,c,a,d,b[f+14],15,-1416354905),d=l(d,e,c,a,b[f+5],21,-57434055),a=l(a,d,e,c,b[f+12],6,1700485571),c=l(c,a,d,e,b[f+3],10,-1894986606),e=l(e,c,a,d,b[f+10],15,-1051523),d=l(d,e,c,a,b[f+1],21,-2054922799),a=l(a,d,e,c,b[f+8],6,1873313359),c=l(c,a,d,e,b[f+15],10,-30611744),
e=l(e,c,a,d,b[f+6],15,-1560198380),d=l(d,e,c,a,b[f+13],21,1309151649),a=l(a,d,e,c,b[f+4],6,-145523070),c=l(c,a,d,e,b[f+11],10,-1120210379),e=l(e,c,a,d,b[f+2],15,718787259),d=l(d,e,c,a,b[f+9],21,-343485551),a=a+m>>>0,d=d+n>>>0,e=e+p>>>0,c=c+q>>>0;return o.endian([a,d,e,c])};i._ff=function(a,b,g,d,e,c,f){a=a+(b&g|~b&d)+(e>>>0)+f;return(a<<c|a>>>32-c)+b};i._gg=function(a,b,g,d,e,c,f){a=a+(b&d|g&~d)+(e>>>0)+f;return(a<<c|a>>>32-c)+b};i._hh=function(a,b,g,d,e,c,f){a=a+(b^g^d)+(e>>>0)+f;return(a<<c|a>>>
32-c)+b};i._ii=function(a,b,g,d,e,c,f){a=a+(g^(b|~d))+(e>>>0)+f;return(a<<c|a>>>32-c)+b};i._blocksize=16;i._digestsize=16})();
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
md5old
md5old("The quick brown fox jumps over the lazy dog");
ready
SparkMD5
SparkMD5.hash("The quick brown fox jumps over the lazy dog");
ready
Crypto.MD5
Crypto.MD5("The quick brown fox jumps over the lazy dog");
ready
FastMD5
md5.hash("The quick brown fox jumps over the lazy dog");
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.