From 96036975f7de63e7f6536748aef3081458b887ef Mon Sep 17 00:00:00 2001 From: Chen Yi-Cyuan Date: Tue, 13 Jan 2015 22:34:27 +0800 Subject: [PATCH] * Improve performance. --- CHANGELOG.md | 4 ++++ bower.json | 2 +- build/md5.min.js | 21 +++++++++-------- package.json | 2 +- src/md5.js | 60 ++++++++++++++++++++++++++---------------------- 5 files changed, 50 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44f9455..d91a9a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# v0.2.1 / 2015-01-13 + +* Improve performance. + # v0.2.0 / 2015-01-12 * Remove ascii parameter. diff --git a/bower.json b/bower.json index 3bfeb03..ecd5a4e 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "js-md5", - "version": "0.2.0", + "version": "0.2.1", "main": ["build/md5.min.js"], "ignore": [ "samples", diff --git a/build/md5.min.js b/build/md5.min.js index d6d8d61..a326996 100644 --- a/build/md5.min.js +++ b/build/md5.min.js @@ -1,10 +1,11 @@ -(function(g,w){var x="undefined"!=typeof module;x&&(g=global);var y=!g.JS_MD5_TEST&&"undefined"!=typeof ArrayBuffer,z="0123456789abcdef".split(""),e=[],k;if(y){var h=new ArrayBuffer(68);k=new Uint8Array(h);e=new Uint32Array(h)}var A=[128,32768,8388608,-2147483648],m=[0,8,16,24],h=function(p){var n,q,r,g,b,a,d,c,f,l=0,h=0,v=0,t=p.length;e[16]=0;do{e[0]=e[16];e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0;if(y)for(a=h;la;++l)b=p.charCodeAt(l),128>b?k[a++]= -b:(2048>b?k[a++]=192|b>>6:(55296>b||57344<=b?k[a++]=224|b>>12:(b=65536+((b&1023)<<10|p.charCodeAt(++l)&1023),k[a++]=240|b>>18,k[a++]=128|b>>12&63),k[a++]=128|b>>6&63),k[a++]=128|b&63);else for(a=h;la;++l)b=p.charCodeAt(l),128>b?e[a>>2]|=b<b?e[a>>2]|=(192|b>>6)<b||57344<=b?e[a>>2]|=(224|b>>12)<>2]|=(240|b>>18)<>2]|=(128|b>>12&63)<>2]|=(128|b>>6&63)<>2]|=(128| -b&63)<>2]|=A[a&3],e[14]=v<<3);n===w?(b=e[0]-680876937,b=(b<<7|b>>>25)-271733879<<0,c=e[1]-117830708+(2004318071&b^-1732584194),c=(c<<12|c>>>20)+b<<0,d=e[2]-1126478375+((b^-271733879)&c^-271733879),d=(d<<17|d>>>15)+c<<0,a=e[3]-1316259209+((c^b)&d^b)):(b=n,a=q,d=r,c=g,b+=(c^a&(d^c))+e[0]-680876936,b=(b<<7|b>>>25)+a<<0,c+=(d^b&(a^d))+e[1]-389564586,c=(c<<12|c>>>20)+b<<0,d+=(a^c&(b^a))+e[2]+606105819,d=(d<<17|d>>>15)+c<<0,a+=(b^d&(c^b))+e[3]-1044525330);a=(a<<22|a>>> -10)+d<<0;b+=(c^a&(d^c))+e[4]-176418897;b=(b<<7|b>>>25)+a<<0;c+=(d^b&(a^d))+e[5]+1200080426;c=(c<<12|c>>>20)+b<<0;d+=(a^c&(b^a))+e[6]-1473231341;d=(d<<17|d>>>15)+c<<0;a+=(b^d&(c^b))+e[7]-45705983;a=(a<<22|a>>>10)+d<<0;b+=(c^a&(d^c))+e[8]+1770035416;b=(b<<7|b>>>25)+a<<0;c+=(d^b&(a^d))+e[9]-1958414417;c=(c<<12|c>>>20)+b<<0;d+=(a^c&(b^a))+e[10]-42063;d=(d<<17|d>>>15)+c<<0;a+=(b^d&(c^b))+e[11]-1990404162;a=(a<<22|a>>>10)+d<<0;b+=(c^a&(d^c))+e[12]+1804603682;b=(b<<7|b>>>25)+a<<0;c+=(d^b&(a^d))+e[13]-40341101; -c=(c<<12|c>>>20)+b<<0;d+=(a^c&(b^a))+e[14]-1502002290;d=(d<<17|d>>>15)+c<<0;a+=(b^d&(c^b))+e[15]+1236535329;a=(a<<22|a>>>10)+d<<0;b+=(d^c&(a^d))+e[1]-165796510;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[6]-1069501632;c=(c<<9|c>>>23)+b<<0;d+=(b^a&(c^b))+e[11]+643717713;d=(d<<14|d>>>18)+c<<0;a+=(c^b&(d^c))+e[0]-373897302;a=(a<<20|a>>>12)+d<<0;b+=(d^c&(a^d))+e[5]-701558691;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[10]+38016083;c=(c<<9|c>>>23)+b<<0;d+=(b^a&(c^b))+e[15]-660478335;d=(d<<14|d>>>18)+c<<0;a+=(c^b& -(d^c))+e[4]-405537848;a=(a<<20|a>>>12)+d<<0;b+=(d^c&(a^d))+e[9]+568446438;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[14]-1019803690;c=(c<<9|c>>>23)+b<<0;d+=(b^a&(c^b))+e[3]-187363961;d=(d<<14|d>>>18)+c<<0;a+=(c^b&(d^c))+e[8]+1163531501;a=(a<<20|a>>>12)+d<<0;b+=(d^c&(a^d))+e[13]-1444681467;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[2]-51403784;c=(c<<9|c>>>23)+b<<0;d+=(b^a&(c^b))+e[7]+1735328473;d=(d<<14|d>>>18)+c<<0;a+=(c^b&(d^c))+e[12]-1926607734;a=(a<<20|a>>>12)+d<<0;f=a^d;b+=(f^c)+e[5]-378558;b=(b<<4|b>>> -28)+a<<0;f=a^d;c+=(f^b)+e[8]-2022574463;c=(c<<11|c>>>21)+b<<0;f=c^b;d+=(f^a)+e[11]+1839030562;d=(d<<16|d>>>16)+c<<0;f=c^b;a+=(f^d)+e[14]-35309556;a=(a<<23|a>>>9)+d<<0;f=a^d;b+=(f^c)+e[1]-1530992060;b=(b<<4|b>>>28)+a<<0;f=a^d;c+=(f^b)+e[4]+1272893353;c=(c<<11|c>>>21)+b<<0;f=c^b;d+=(f^a)+e[7]-155497632;d=(d<<16|d>>>16)+c<<0;f=c^b;a+=(f^d)+e[10]-1094730640;a=(a<<23|a>>>9)+d<<0;f=a^d;b+=(f^c)+e[13]+681279174;b=(b<<4|b>>>28)+a<<0;f=a^d;c+=(f^b)+e[0]-358537222;c=(c<<11|c>>>21)+b<<0;f=c^b;d+=(f^a)+e[3]- -722521979;d=(d<<16|d>>>16)+c<<0;f=c^b;a+=(f^d)+e[6]+76029189;a=(a<<23|a>>>9)+d<<0;f=a^d;b+=(f^c)+e[9]-640364487;b=(b<<4|b>>>28)+a<<0;f=a^d;c+=(f^b)+e[12]-421815835;c=(c<<11|c>>>21)+b<<0;f=c^b;d+=(f^a)+e[15]+530742520;d=(d<<16|d>>>16)+c<<0;f=c^b;a+=(f^d)+e[2]-995338651;a=(a<<23|a>>>9)+d<<0;b+=(d^(a|~c))+e[0]-198630844;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[7]+1126891415;c=(c<<10|c>>>22)+b<<0;d+=(b^(c|~a))+e[14]-1416354905;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[5]-57434055;a=(a<<21|a>>>11)+d<<0;b+=(d^ -(a|~c))+e[12]+1700485571;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[3]-1894986606;c=(c<<10|c>>>22)+b<<0;d+=(b^(c|~a))+e[10]-1051523;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[1]-2054922799;a=(a<<21|a>>>11)+d<<0;b+=(d^(a|~c))+e[8]+1873313359;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[15]-30611744;c=(c<<10|c>>>22)+b<<0;d+=(b^(c|~a))+e[6]-1560198380;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[13]+1309151649;a=(a<<21|a>>>11)+d<<0;b+=(d^(a|~c))+e[4]-145523070;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[11]-1120210379;c=(c<<10|c>>> -22)+b<<0;d+=(b^(c|~a))+e[2]+718787259;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[9]-343485551;a=(a<<21|a>>>11)+d<<0;n===w?(n=b+1732584193<<0,q=a-271733879<<0,r=d-1732584194<<0,g=c+271733878<<0):(n=n+b<<0,q=q+a<<0,r=r+d<<0,g=g+c<<0)}while(lh;h++)var k=h<<3,g=g+(z[e>>k+4&15]+z[e>>k&15]);return g};!g.JS_MD5_TEST&&x?module.exports=h:g&&(g.md5=h)})(this); +(function(k,x){var t="undefined"!=typeof module;t&&(k=global);var y=!k.JS_MD5_TEST&&"undefined"!=typeof ArrayBuffer,f="0123456789abcdef".split(""),z=[128,32768,8388608,-2147483648],u=[0,8,16,24],e=[],r,w;if(y){var p=new ArrayBuffer(68);r=new Uint8Array(p);e=new Uint32Array(p)}if(!k.JS_MD5_TEST&&t){var A=require("crypto");w=function(e){return A.createHash("md5").update(e,"utf8").digest("hex")}}p=function(k){var h,l,m,n,b,a,d,c,g,q=0,p=0,t=0,v=k.length;if(w&&22a;++q)b=k.charCodeAt(q),128>b?r[a++]=b:(2048>b?r[a++]=192|b>>6:(55296>b||57344<=b?r[a++]=224|b>>12:(b=65536+((b&1023)<<10|k.charCodeAt(++q)&1023),r[a++]=240|b>>18,r[a++]=128|b>>12&63),r[a++]=128|b>>6&63),r[a++]=128|b&63);else for(a=p;qa;++q)b=k.charCodeAt(q),128>b?e[a>>2]|=b<b?e[a>>2]|=(192|b>>6)<b||57344<=b?e[a>>2]|=(224|b>>12)<>2]|=(240|b>>18)<>2]|=(128|b>>12&63)<>2]|=(128|b>>6&63)<>2]|=(128|b&63)<>2]|=z[a&3],e[14]=t<<3);h===x?(b=e[0]-680876937,b=(b<<7|b>>>25)-271733879<<0,c=(-1732584194^b&2004318071)+e[1]-117830708,c=(c<<12|c>>>20)+b<<0,d=(-271733879^c&(b^-271733879))+e[2]-1126478375,d=(d<<17|d>>>15)+c<<0,a=(b^d&(c^b))+e[3]-1316259209):(b=h,a=l,d=m,c=n,b+=(c^a&(d^c))+e[0]-680876936,b=(b<<7|b>>>25)+a<<0,c+=(d^ +b&(a^d))+e[1]-389564586,c=(c<<12|c>>>20)+b<<0,d+=(a^c&(b^a))+e[2]+606105819,d=(d<<17|d>>>15)+c<<0,a+=(b^d&(c^b))+e[3]-1044525330);a=(a<<22|a>>>10)+d<<0;b+=(c^a&(d^c))+e[4]-176418897;b=(b<<7|b>>>25)+a<<0;c+=(d^b&(a^d))+e[5]+1200080426;c=(c<<12|c>>>20)+b<<0;d+=(a^c&(b^a))+e[6]-1473231341;d=(d<<17|d>>>15)+c<<0;a+=(b^d&(c^b))+e[7]-45705983;a=(a<<22|a>>>10)+d<<0;b+=(c^a&(d^c))+e[8]+1770035416;b=(b<<7|b>>>25)+a<<0;c+=(d^b&(a^d))+e[9]-1958414417;c=(c<<12|c>>>20)+b<<0;d+=(a^c&(b^a))+e[10]-42063;d=(d<<17| +d>>>15)+c<<0;a+=(b^d&(c^b))+e[11]-1990404162;a=(a<<22|a>>>10)+d<<0;b+=(c^a&(d^c))+e[12]+1804603682;b=(b<<7|b>>>25)+a<<0;c+=(d^b&(a^d))+e[13]-40341101;c=(c<<12|c>>>20)+b<<0;d+=(a^c&(b^a))+e[14]-1502002290;d=(d<<17|d>>>15)+c<<0;a+=(b^d&(c^b))+e[15]+1236535329;a=(a<<22|a>>>10)+d<<0;b+=(d^c&(a^d))+e[1]-165796510;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[6]-1069501632;c=(c<<9|c>>>23)+b<<0;d+=(b^a&(c^b))+e[11]+643717713;d=(d<<14|d>>>18)+c<<0;a+=(c^b&(d^c))+e[0]-373897302;a=(a<<20|a>>>12)+d<<0;b+=(d^c&(a^d))+ +e[5]-701558691;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[10]+38016083;c=(c<<9|c>>>23)+b<<0;d+=(b^a&(c^b))+e[15]-660478335;d=(d<<14|d>>>18)+c<<0;a+=(c^b&(d^c))+e[4]-405537848;a=(a<<20|a>>>12)+d<<0;b+=(d^c&(a^d))+e[9]+568446438;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[14]-1019803690;c=(c<<9|c>>>23)+b<<0;d+=(b^a&(c^b))+e[3]-187363961;d=(d<<14|d>>>18)+c<<0;a+=(c^b&(d^c))+e[8]+1163531501;a=(a<<20|a>>>12)+d<<0;b+=(d^c&(a^d))+e[13]-1444681467;b=(b<<5|b>>>27)+a<<0;c+=(a^d&(b^a))+e[2]-51403784;c=(c<<9|c>>>23)+b<< +0;d+=(b^a&(c^b))+e[7]+1735328473;d=(d<<14|d>>>18)+c<<0;a+=(c^b&(d^c))+e[12]-1926607734;a=(a<<20|a>>>12)+d<<0;g=a^d;b+=(g^c)+e[5]-378558;b=(b<<4|b>>>28)+a<<0;c+=(g^b)+e[8]-2022574463;c=(c<<11|c>>>21)+b<<0;g=c^b;d+=(g^a)+e[11]+1839030562;d=(d<<16|d>>>16)+c<<0;a+=(g^d)+e[14]-35309556;a=(a<<23|a>>>9)+d<<0;g=a^d;b+=(g^c)+e[1]-1530992060;b=(b<<4|b>>>28)+a<<0;c+=(g^b)+e[4]+1272893353;c=(c<<11|c>>>21)+b<<0;g=c^b;d+=(g^a)+e[7]-155497632;d=(d<<16|d>>>16)+c<<0;a+=(g^d)+e[10]-1094730640;a=(a<<23|a>>>9)+d<<0; +g=a^d;b+=(g^c)+e[13]+681279174;b=(b<<4|b>>>28)+a<<0;c+=(g^b)+e[0]-358537222;c=(c<<11|c>>>21)+b<<0;g=c^b;d+=(g^a)+e[3]-722521979;d=(d<<16|d>>>16)+c<<0;a+=(g^d)+e[6]+76029189;a=(a<<23|a>>>9)+d<<0;g=a^d;b+=(g^c)+e[9]-640364487;b=(b<<4|b>>>28)+a<<0;c+=(g^b)+e[12]-421815835;c=(c<<11|c>>>21)+b<<0;g=c^b;d+=(g^a)+e[15]+530742520;d=(d<<16|d>>>16)+c<<0;a+=(g^d)+e[2]-995338651;a=(a<<23|a>>>9)+d<<0;b+=(d^(a|~c))+e[0]-198630844;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[7]+1126891415;c=(c<<10|c>>>22)+b<<0;d+=(b^(c| +~a))+e[14]-1416354905;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[5]-57434055;a=(a<<21|a>>>11)+d<<0;b+=(d^(a|~c))+e[12]+1700485571;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[3]-1894986606;c=(c<<10|c>>>22)+b<<0;d+=(b^(c|~a))+e[10]-1051523;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[1]-2054922799;a=(a<<21|a>>>11)+d<<0;b+=(d^(a|~c))+e[8]+1873313359;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[15]-30611744;c=(c<<10|c>>>22)+b<<0;d+=(b^(c|~a))+e[6]-1560198380;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[13]+1309151649;a=(a<<21|a>>>11)+ +d<<0;b+=(d^(a|~c))+e[4]-145523070;b=(b<<6|b>>>26)+a<<0;c+=(a^(b|~d))+e[11]-1120210379;c=(c<<10|c>>>22)+b<<0;d+=(b^(c|~a))+e[2]+718787259;d=(d<<15|d>>>17)+c<<0;a+=(c^(d|~b))+e[9]-343485551;a=(a<<21|a>>>11)+d<<0;h===x?(h=b+1732584193<<0,l=a-271733879<<0,m=d-1732584194<<0,n=c+271733878<<0):(h=h+b<<0,l=l+a<<0,m=m+d<<0,n=n+c<<0)}while(q>4&15]+f[h&15]+f[h>>12&15]+f[h>>8&15]+f[h>>20&15]+f[h>>16&15]+f[h>>28&15]+f[h>>24&15]+f[l>>4&15]+f[l&15]+f[l>>12&15]+f[l>>8&15]+f[l>>20&15]+f[l>>16&15]+f[l>> +28&15]+f[l>>24&15]+f[m>>4&15]+f[m&15]+f[m>>12&15]+f[m>>8&15]+f[m>>20&15]+f[m>>16&15]+f[m>>28&15]+f[m>>24&15]+f[n>>4&15]+f[n&15]+f[n>>12&15]+f[n>>8&15]+f[n>>20&15]+f[n>>16&15]+f[n>>28&15]+f[n>>24&15]};!k.JS_MD5_TEST&&t?module.exports=p:k&&(k.md5=p)})(this); diff --git a/package.json b/package.json index c89f478..0845b35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "js-md5", - "version": "0.2.0", + "version": "0.2.1", "description": "A simple MD5 hash function for JavaScript supports UTF-8 encoding.", "main": "src/md5.js", "devDependencies": { diff --git a/src/md5.js b/src/md5.js index 3487511..72b7c54 100644 --- a/src/md5.js +++ b/src/md5.js @@ -1,5 +1,5 @@ /* - * js-md5 v0.2.0 + * js-md5 v0.2.1 * https://github.com/emn178/js-md5 * * Copyright 2014-2015, emn178@gmail.com @@ -15,22 +15,30 @@ root = global; } var ARRAY_BUFFER = !root.JS_MD5_TEST && typeof(ArrayBuffer) != 'undefined'; - var HEX_CHARS = '0123456789abcdef'.split(''); + var EXTRA = [128, 32768, 8388608, -2147483648]; + var SHIFT = [0, 8, 16, 24]; - var blocks = [], buffer8; + var blocks = [], buffer8, nodeMd5; if(ARRAY_BUFFER) { var buffer = new ArrayBuffer(68); buffer8 = new Uint8Array(buffer); blocks = new Uint32Array(buffer); } - var EXTRA = [128, 32768, 8388608, -2147483648]; - var SHIFT = [0, 8, 16, 24]; + if(!root.JS_MD5_TEST && NODE_JS) { + var crypto = require('crypto'); + nodeMd5 = function(message) { + return crypto.createHash('md5').update(message, 'utf8').digest('hex'); + }; + } var md5 = function(message) { var h0, h1, h2, h3, a, b, c, d, bc, da, code, index = 0, i, start = 0, bytes = 0, length = message.length; + if(nodeMd5 && length > 22) { + return nodeMd5(message); + } blocks[16] = 0; do { blocks[0] = blocks[16]; @@ -89,11 +97,11 @@ if(h0 === undefined) { a = blocks[0] - 680876937; a = (a << 7 | a >>> 25) - 271733879 << 0; - d = blocks[1] - 117830708 + ((2004318071 & a) ^ -1732584194); + d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708; d = (d << 12 | d >>> 20) + a << 0; - c = blocks[2] - 1126478375 + (((a ^ -271733879) & d) ^ -271733879); + c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375; c = (c << 17 | c >>> 15) + d << 0; - b = blocks[3] - 1316259209 + (((d ^ a) & c) ^ a); + b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209; b = (b << 22 | b >>> 10) + c << 0; } else { a = h0; @@ -169,49 +177,41 @@ bc = b ^ c; a += (bc ^ d) + blocks[5] - 378558; a = (a << 4 | a >>> 28) + b << 0; - bc = b ^ c; d += (bc ^ a) + blocks[8] - 2022574463; d = (d << 11 | d >>> 21) + a << 0; da = d ^ a; c += (da ^ b) + blocks[11] + 1839030562; c = (c << 16 | c >>> 16) + d << 0; - da = d ^ a; b += (da ^ c) + blocks[14] - 35309556; b = (b << 23 | b >>> 9) + c << 0; bc = b ^ c; a += (bc ^ d) + blocks[1] - 1530992060; a = (a << 4 | a >>> 28) + b << 0; - bc = b ^ c; d += (bc ^ a) + blocks[4] + 1272893353; d = (d << 11 | d >>> 21) + a << 0; da = d ^ a; c += (da ^ b) + blocks[7] - 155497632; c = (c << 16 | c >>> 16) + d << 0; - da = d ^ a; b += (da ^ c) + blocks[10] - 1094730640; b = (b << 23 | b >>> 9) + c << 0; bc = b ^ c; a += (bc ^ d) + blocks[13] + 681279174; a = (a << 4 | a >>> 28) + b << 0; - bc = b ^ c; d += (bc ^ a) + blocks[0] - 358537222; d = (d << 11 | d >>> 21) + a << 0; da = d ^ a; c += (da ^ b) + blocks[3] - 722521979; c = (c << 16 | c >>> 16) + d << 0; - da = d ^ a; b += (da ^ c) + blocks[6] + 76029189; b = (b << 23 | b >>> 9) + c << 0; bc = b ^ c; a += (bc ^ d) + blocks[9] - 640364487; a = (a << 4 | a >>> 28) + b << 0; - bc = b ^ c; d += (bc ^ a) + blocks[12] - 421815835; d = (d << 11 | d >>> 21) + a << 0; da = d ^ a; c += (da ^ b) + blocks[15] + 530742520; c = (c << 16 | c >>> 16) + d << 0; - da = d ^ a; b += (da ^ c) + blocks[2] - 995338651; b = (b << 23 | b >>> 9) + c << 0; a += (c ^ (b | ~d)) + blocks[0] - 198630844; @@ -249,7 +249,7 @@ if(h0 === undefined) { h0 = a + 1732584193 << 0; - h1 = b - 271733879<< 0; + h1 = b - 271733879 << 0; h2 = c - 1732584194 << 0; h3 = d + 271733878 << 0; } else { @@ -260,16 +260,22 @@ } } while(index < length); - return toHexString(h0) + toHexString(h1) + toHexString(h2) + toHexString(h3); - }; - - var toHexString = function(num) { - var hex = ''; - for(var i = 0; i < 4; i++) { - var offset = i << 3; - hex += HEX_CHARS[(num >> (offset + 4)) & 0x0F] + HEX_CHARS[(num >> offset) & 0x0F]; - } - return hex; + return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] + + HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] + + HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] + + HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] + + HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] + + HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] + + HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] + + HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] + + HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] + + HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] + + HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] + + HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] + + HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] + + HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] + + HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] + + HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F]; }; if(!root.JS_MD5_TEST && NODE_JS) {