* Remove ascii parameter.

* Improve performance.
pull/3/head
Chen Yi-Cyuan 11 years ago
parent 5bc2fd9a54
commit ca6b36b0ec

@ -1,3 +1,8 @@
# v0.2.0 / 2015-01-12
* Remove ascii parameter.
* Improve performance.
# v0.1.4 / 2015-01-11 # v0.1.4 / 2015-01-11
* Improve performance. * Improve performance.

@ -30,20 +30,6 @@ If you use node.js, you should require the module first:
md5 = require('js-md5'); md5 = require('js-md5');
``` ```
### Methods
#### md5(str, asciiOnly)
Hash string to md5, set asciiOnly to true for better performace if you ensure input is ascii.
##### *str: `String`*
String to hash.
##### *asciiOnly: `Boolean` (default: `false`)*
Specify the string encoding is ASCII.
## Example ## Example
Code Code
```JavaScript ```JavaScript

@ -1,6 +1,6 @@
{ {
"name": "js-md5", "name": "js-md5",
"version": "0.1.4", "version": "0.2.0",
"main": ["build/md5.min.js"], "main": ["build/md5.min.js"],
"ignore": [ "ignore": [
"samples", "samples",

20
build/md5.min.js vendored

@ -1,10 +1,10 @@
(function(m,x){var q="undefined"!=typeof module;q&&(m=global);var w="0123456789abcdef".split(""),e=[],r;if(!m.JS_MD5_TEST&&"undefined"!=typeof ArrayBuffer){var h=new ArrayBuffer(64);r=new Uint8Array(h);e=new Uint32Array(h)}var h=function(p,m){var n=1732584193,t=4023233417,h=2562383102,u=271733878,c,a,b,d,f,k=0,l,g,q=!1;if(!m&&/[^\x00-\x7F]/.test(p)){q=!0;l=[];for(a=g=0;a<p.length;a++)b=p.charCodeAt(a),128>b?l[g++]=b:(2048>b?l[g++]=192|b>>6:(55296>b||57344<=b?l[g++]=224|b>>12:(b=65536+((b&1023)<<10| (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;l<t&&64>a;++l)b=p.charCodeAt(l),128>b?k[a++]=
p.charCodeAt(++a)&1023),l[g++]=240|b>>18,l[g++]=128|b>>12&63),l[g++]=128|b>>6&63),l[g++]=128|b&63);g=l.length}else g=p.length;do{e[0]=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(q)if(r)for(a=0;k<g&&64>a;++k,++a)r[a]=l[k];else for(a=0;k<g&&64>a;++k,++a)e[a>>2]|=l[k]<<((a&3)<<3);else if(r)for(a=0;k<g&&64>a;++k,++a)r[a]=p.charCodeAt(k);else for(a=0;k<g&&64>a;++k,++a)e[a>>2]|=p.charCodeAt(k)<<((a&3)<<3);k==g&&(e[a>>2]|=128<<((a&3)<<3),e[14]=g<<3);c===x?(c=e[0]- 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;l<t&&64>a;++l)b=p.charCodeAt(l),128>b?e[a>>2]|=b<<m[a++&3]:(2048>b?e[a>>2]|=(192|b>>6)<<m[a++&3]:(55296>b||57344<=b?e[a>>2]|=(224|b>>12)<<m[a++&3]:(b=65536+((b&1023)<<10|p.charCodeAt(++l)&1023),e[a>>2]|=(240|b>>18)<<m[a++&3],e[a>>2]|=(128|b>>12&63)<<m[a++&3]),e[a>>2]|=(128|b>>6&63)<<m[a++&3]),e[a>>2]|=(128|
680876937,c=(c<<7|c>>>25)-271733879<<0,d=e[1]-117830708+(2004318071&c^-1732584194),d=(d<<12|d>>>20)+c<<0,b=e[2]-1126478375+((c^-271733879)&d^-271733879),b=(b<<17|b>>>15)+d<<0,a=e[3]-1316259209+((d^c)&b^c)):(c=n,a=t,b=h,d=u,c+=(d^a&(b^d))+e[0]-680876936,c=(c<<7|c>>>25)+a<<0,d+=(b^c&(a^b))+e[1]-389564586,d=(d<<12|d>>>20)+c<<0,b+=(a^d&(c^a))+e[2]+606105819,b=(b<<17|b>>>15)+d<<0,a+=(c^b&(d^c))+e[3]-1044525330);a=(a<<22|a>>>10)+b<<0;c+=(d^a&(b^d))+e[4]-176418897;c=(c<<7|c>>>25)+a<<0;d+=(b^c&(a^b))+e[5]+ b&63)<<m[a++&3]);v+=a-h;h=a-64;l==t&&(e[a>>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>>>
1200080426;d=(d<<12|d>>>20)+c<<0;b+=(a^d&(c^a))+e[6]-1473231341;b=(b<<17|b>>>15)+d<<0;a+=(c^b&(d^c))+e[7]-45705983;a=(a<<22|a>>>10)+b<<0;c+=(d^a&(b^d))+e[8]+1770035416;c=(c<<7|c>>>25)+a<<0;d+=(b^c&(a^b))+e[9]-1958414417;d=(d<<12|d>>>20)+c<<0;b+=(a^d&(c^a))+e[10]-42063;b=(b<<17|b>>>15)+d<<0;a+=(c^b&(d^c))+e[11]-1990404162;a=(a<<22|a>>>10)+b<<0;c+=(d^a&(b^d))+e[12]+1804603682;c=(c<<7|c>>>25)+a<<0;d+=(b^c&(a^b))+e[13]-40341101;d=(d<<12|d>>>20)+c<<0;b+=(a^d&(c^a))+e[14]-1502002290;b=(b<<17|b>>>15)+d<< 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;
0;a+=(c^b&(d^c))+e[15]+1236535329;a=(a<<22|a>>>10)+b<<0;c+=(b^d&(a^b))+e[1]-165796510;c=(c<<5|c>>>27)+a<<0;d+=(a^b&(c^a))+e[6]-1069501632;d=(d<<9|d>>>23)+c<<0;b+=(c^a&(d^c))+e[11]+643717713;b=(b<<14|b>>>18)+d<<0;a+=(d^c&(b^d))+e[0]-373897302;a=(a<<20|a>>>12)+b<<0;c+=(b^d&(a^b))+e[5]-701558691;c=(c<<5|c>>>27)+a<<0;d+=(a^b&(c^a))+e[10]+38016083;d=(d<<9|d>>>23)+c<<0;b+=(c^a&(d^c))+e[15]-660478335;b=(b<<14|b>>>18)+d<<0;a+=(d^c&(b^d))+e[4]-405537848;a=(a<<20|a>>>12)+b<<0;c+=(b^d&(a^b))+e[9]+568446438; 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&
c=(c<<5|c>>>27)+a<<0;d+=(a^b&(c^a))+e[14]-1019803690;d=(d<<9|d>>>23)+c<<0;b+=(c^a&(d^c))+e[3]-187363961;b=(b<<14|b>>>18)+d<<0;a+=(d^c&(b^d))+e[8]+1163531501;a=(a<<20|a>>>12)+b<<0;c+=(b^d&(a^b))+e[13]-1444681467;c=(c<<5|c>>>27)+a<<0;d+=(a^b&(c^a))+e[2]-51403784;d=(d<<9|d>>>23)+c<<0;b+=(c^a&(d^c))+e[7]+1735328473;b=(b<<14|b>>>18)+d<<0;a+=(d^c&(b^d))+e[12]-1926607734;a=(a<<20|a>>>12)+b<<0;f=a^b;c+=(f^d)+e[5]-378558;c=(c<<4|c>>>28)+a<<0;f=a^b;d+=(f^c)+e[8]-2022574463;d=(d<<11|d>>>21)+c<<0;f=d^c;b+=(f^ (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>>>
a)+e[11]+1839030562;b=(b<<16|b>>>16)+d<<0;f=d^c;a+=(f^b)+e[14]-35309556;a=(a<<23|a>>>9)+b<<0;f=a^b;c+=(f^d)+e[1]-1530992060;c=(c<<4|c>>>28)+a<<0;f=a^b;d+=(f^c)+e[4]+1272893353;d=(d<<11|d>>>21)+c<<0;f=d^c;b+=(f^a)+e[7]-155497632;b=(b<<16|b>>>16)+d<<0;f=d^c;a+=(f^b)+e[10]-1094730640;a=(a<<23|a>>>9)+b<<0;f=a^b;c+=(f^d)+e[13]+681279174;c=(c<<4|c>>>28)+a<<0;f=a^b;d+=(f^c)+e[0]-358537222;d=(d<<11|d>>>21)+c<<0;f=d^c;b+=(f^a)+e[3]-722521979;b=(b<<16|b>>>16)+d<<0;f=d^c;a+=(f^b)+e[6]+76029189;a=(a<<23|a>>> 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]-
9)+b<<0;f=a^b;c+=(f^d)+e[9]-640364487;c=(c<<4|c>>>28)+a<<0;f=a^b;d+=(f^c)+e[12]-421815835;d=(d<<11|d>>>21)+c<<0;f=d^c;b+=(f^a)+e[15]+530742520;b=(b<<16|b>>>16)+d<<0;f=d^c;a+=(f^b)+e[2]-995338651;a=(a<<23|a>>>9)+b<<0;c+=(b^(a|~d))+e[0]-198630844;c=(c<<6|c>>>26)+a<<0;d+=(a^(c|~b))+e[7]+1126891415;d=(d<<10|d>>>22)+c<<0;b+=(c^(d|~a))+e[14]-1416354905;b=(b<<15|b>>>17)+d<<0;a+=(d^(b|~c))+e[5]-57434055;a=(a<<21|a>>>11)+b<<0;c+=(b^(a|~d))+e[12]+1700485571;c=(c<<6|c>>>26)+a<<0;d+=(a^(c|~b))+e[3]-1894986606; 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^
d=(d<<10|d>>>22)+c<<0;b+=(c^(d|~a))+e[10]-1051523;b=(b<<15|b>>>17)+d<<0;a+=(d^(b|~c))+e[1]-2054922799;a=(a<<21|a>>>11)+b<<0;c+=(b^(a|~d))+e[8]+1873313359;c=(c<<6|c>>>26)+a<<0;d+=(a^(c|~b))+e[15]-30611744;d=(d<<10|d>>>22)+c<<0;b+=(c^(d|~a))+e[6]-1560198380;b=(b<<15|b>>>17)+d<<0;a+=(d^(b|~c))+e[13]+1309151649;a=(a<<21|a>>>11)+b<<0;c+=(b^(a|~d))+e[4]-145523070;c=(c<<6|c>>>26)+a<<0;d+=(a^(c|~b))+e[11]-1120210379;d=(d<<10|d>>>22)+c<<0;b+=(c^(d|~a))+e[2]+718787259;b=(b<<15|b>>>17)+d<<0;a+=(d^(b|~c))+e[9]- (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>>>
343485551;a=(a<<21|a>>>11)+b<<0;n=n+c<<0;t=t+a<<0;h=h+b<<0;u=u+d<<0}while(k<g);return v(n)+v(t)+v(h)+v(u)},v=function(e){for(var h="",n=0;4>n;n++)var m=n<<3,h=h+(w[e>>m+4&15]+w[e>>m&15]);return h};!m.JS_MD5_TEST&&q?module.exports=h:m&&(m.md5=h)})(this); 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(l<t);return u(n)+u(q)+u(r)+u(g)},u=function(e){for(var g="",h=0;4>h;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);

@ -1,6 +1,6 @@
{ {
"name": "js-md5", "name": "js-md5",
"version": "0.1.4", "version": "0.2.0",
"description": "A simple MD5 hash function for JavaScript supports UTF-8 encoding.", "description": "A simple MD5 hash function for JavaScript supports UTF-8 encoding.",
"main": "src/md5.js", "main": "src/md5.js",
"devDependencies": { "devDependencies": {

@ -1,5 +1,5 @@
/* /*
* js-md5 v0.1.4 * js-md5 v0.2.0
* https://github.com/emn178/js-md5 * https://github.com/emn178/js-md5
* *
* Copyright 2014-2015, emn178@gmail.com * Copyright 2014-2015, emn178@gmail.com
@ -10,62 +10,83 @@
;(function(root, undefined) { ;(function(root, undefined) {
'use strict'; 'use strict';
var nodejs = typeof(module) != 'undefined'; var NODE_JS = typeof(module) != 'undefined';
if(nodejs) { if(NODE_JS) {
root = global; root = global;
} }
var ARRAY_BUFFER = !root.JS_MD5_TEST && typeof(ArrayBuffer) != 'undefined';
var HEX_CHARS = '0123456789abcdef'.split(''); var HEX_CHARS = '0123456789abcdef'.split('');
var blocks = [], buffer8; var blocks = [], buffer8;
if(!root.JS_MD5_TEST && typeof(ArrayBuffer) != 'undefined') { if(ARRAY_BUFFER) {
var buffer = new ArrayBuffer(64); var buffer = new ArrayBuffer(68);
buffer8 = new Uint8Array(buffer); buffer8 = new Uint8Array(buffer);
blocks = new Uint32Array(buffer); blocks = new Uint32Array(buffer);
} }
var md5 = function(message, asciiOnly) { var EXTRA = [128, 32768, 8388608, -2147483648];
var h0 = 0x67452301, h1 = 0xEFCDAB89, h2 = 0x98BADCFE, h3 = 0x10325476, var SHIFT = [0, 8, 16, 24];
a, b, c, d, bc, da, index = 0, bytes, length, utf8 = false, i;
if(!asciiOnly && /[^\x00-\x7F]/.test(message)) { var md5 = function(message) {
utf8 = true; var h0, h1, h2, h3, a, b, c, d, bc, da, code,
bytes = getBytesFromUtf8(message); index = 0, i, start = 0, bytes = 0, length = message.length;
length = bytes.length; blocks[16] = 0;
} else {
length = message.length;
}
do { do {
blocks[0] = blocks[1] = blocks[2] = blocks[3] = blocks[0] = blocks[16];
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
if(utf8) { if(ARRAY_BUFFER) {
if(buffer8) { for (i = start;index < length && i < 64; ++index) {
for(i = 0;index < length && i < 64;++index, ++i) { code = message.charCodeAt(index);
buffer8[i] = bytes[index]; if (code < 0x80) {
} buffer8[i++] = code;
} else if (code < 0x800) {
buffer8[i++] = 0xc0 | (code >> 6);
buffer8[i++] = 0x80 | (code & 0x3f);
} else if (code < 0xd800 || code >= 0xe000) {
buffer8[i++] = 0xe0 | (code >> 12);
buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
buffer8[i++] = 0x80 | (code & 0x3f);
} else { } else {
for(i = 0;index < length && i < 64;++index, ++i) { code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
blocks[i >> 2] |= bytes[index] <<((i & 3) << 3); buffer8[i++] = 0xf0 | (code >> 18);
buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);
buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
buffer8[i++] = 0x80 | (code & 0x3f);
} }
} }
} else { } else {
if(buffer8) { for (i = start;index < length && i < 64; ++index) {
for(i = 0;index < length && i < 64;++index, ++i) { code = message.charCodeAt(index);
buffer8[i] = message.charCodeAt(index); if (code < 0x80) {
} blocks[i >> 2] |= code << SHIFT[i++ & 3];
} else if (code < 0x800) {
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else if (code < 0xd800 || code >= 0xe000) {
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else { } else {
for(i = 0;index < length && i < 64;++index, ++i) { code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
blocks[i >> 2] |= message.charCodeAt(index) << ((i & 3) << 3); blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} }
} }
} }
bytes += i - start;
start = i - 64;
if(index == length) { if(index == length) {
blocks[i >> 2] |= 0x80 << ((i & 3) << 3); blocks[i >> 2] |= EXTRA[i & 3];
blocks[14] = length << 3; blocks[14] = bytes << 3;
} }
if(a === undefined) { if(h0 === undefined) {
a = blocks[0] - 680876937; a = blocks[0] - 680876937;
a = (a << 7 | a >>> 25) - 271733879 << 0; a = (a << 7 | a >>> 25) - 271733879 << 0;
d = blocks[1] - 117830708 + ((2004318071 & a) ^ -1732584194); d = blocks[1] - 117830708 + ((2004318071 & a) ^ -1732584194);
@ -226,10 +247,17 @@
b += (d ^ (c | ~a)) + blocks[9] - 343485551; b += (d ^ (c | ~a)) + blocks[9] - 343485551;
b = (b << 21 | b >>> 11) + c << 0; b = (b << 21 | b >>> 11) + c << 0;
if(h0 === undefined) {
h0 = a + 1732584193 << 0;
h1 = b - 271733879<< 0;
h2 = c - 1732584194 << 0;
h3 = d + 271733878 << 0;
} else {
h0 = h0 + a << 0; h0 = h0 + a << 0;
h1 = h1 + b << 0; h1 = h1 + b << 0;
h2 = h2 + c << 0; h2 = h2 + c << 0;
h3 = h3 + d << 0; h3 = h3 + d << 0;
}
} while(index < length); } while(index < length);
return toHexString(h0) + toHexString(h1) + toHexString(h2) + toHexString(h3); return toHexString(h0) + toHexString(h1) + toHexString(h2) + toHexString(h3);
@ -244,31 +272,7 @@
return hex; return hex;
}; };
var getBytesFromUtf8 = function(str) { if(!root.JS_MD5_TEST && NODE_JS) {
var bytes = [], index = 0;
for (var i = 0;i < str.length; i++) {
var c = str.charCodeAt(i);
if (c < 0x80) {
bytes[index++] = c;
} else if (c < 0x800) {
bytes[index++] = 0xc0 | (c >> 6);
bytes[index++] = 0x80 | (c & 0x3f);
} else if (c < 0xd800 || c >= 0xe000) {
bytes[index++] = 0xe0 | (c >> 12);
bytes[index++] = 0x80 | ((c >> 6) & 0x3f);
bytes[index++] = 0x80 | (c & 0x3f);
} else {
c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
bytes[index++] = 0xf0 | (c >> 18);
bytes[index++] = 0x80 | ((c >> 12) & 0x3f);
bytes[index++] = 0x80 | ((c >> 6) & 0x3f);
bytes[index++] = 0x80 | (c & 0x3f);
}
}
return bytes;
};
if(!root.JS_MD5_TEST && nodejs) {
module.exports = md5; module.exports = md5;
} else if(root) { } else if(root) {
root.md5 = md5; root.md5 = md5;

Loading…
Cancel
Save