Javascript Course

The md5() function (presented in this page) can be used in JavaScript to calculate the MD5 hash of a string. Returns the hash as a 32-character hexadecimal number.


Code of the md5() function

/**
* MD5 (Message-Digest Algorithm)
* http://www.webtoolkit.info/
**/

function md5(string) {
 function RotateLeft(lValue, iShiftBits) {
 return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
 }

 function AddUnsigned(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);
 }
 }

 function F(x,y,z) { return (x & y) | ((~x) & z); }
 function G(x,y,z) { return (x & z) | (y & (~z)); }
 function H(x,y,z) { return (x ^ y ^ z); }
 function I(x,y,z) { return (y ^ (x | (~z))); }
 
 function FF(a,b,c,d,x,s,ac) {
 a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
 return AddUnsigned(RotateLeft(a, s), b);
 };

 function GG(a,b,c,d,x,s,ac) {
 a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
 return AddUnsigned(RotateLeft(a, s), b);
 };

 function HH(a,b,c,d,x,s,ac) {
 a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
 return AddUnsigned(RotateLeft(a, s), b);
 };

 function II(a,b,c,d,x,s,ac) {
 a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
 return AddUnsigned(RotateLeft(a, s), b);
 };

 function ConvertToWordArray(string) {
 var lWordCount;
 var lMessageLength = string.length;
 var lNumberOfWords_temp1=lMessageLength + 8;
 var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
 var lNumberOfWords = (lNumberOfWords_temp2+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;
 };

 function WordToHex(lValue) {
 var WordToHexValue='',WordToHexValue_temp='',lByte,lCount;
 for (lCount = 0;lCount<=3;lCount++) {
 lByte = (lValue>>>(lCount*8)) & 255;
 WordToHexValue_temp = '0' + lByte.toString(16);
 WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
 }
 return WordToHexValue;
 };

 function Utf8Encode(string) {
 string = string.replace(/\r\n/g,'\n');
 var utftext = '';

 for (var n = 0; n < string.length; n++) {
 var c = string.charCodeAt(n);

 if (c < 128) {
 utftext += String.fromCharCode(c);
 }
 else if((c > 127) && (c < 2048)) {
 utftext += String.fromCharCode((c >> 6) | 192);
 utftext += String.fromCharCode((c & 63) | 128);
 }
 else {
 utftext += String.fromCharCode((c >> 12) | 224);
 utftext += String.fromCharCode(((c >> 6) & 63) | 128);
 utftext += String.fromCharCode((c & 63) | 128);
 }
 }

 return utftext;
 };

 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 temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

 return temp.toLowerCase();
}
- Usage:
1. Copy the md5() function into your JavaScript script.
2. To get the MD5 hash of a string, calls the md5() function:   md5('string'); .

- Example. The string entered into an input text field will be encrypted with MD5, and added into another input form field.
<h4>Example JavaScript MD5</h4>

<form action='#' method='post'>
 Enter a text:<br/>
 <input type='text' name='strex' id='strex' size='20' /> <input type='button' id='codemd5' value='Get MD5' /><br>
 MD5 hash string:<br>
 <input type='text' name='strmd5' id='strmd5' size='33' />
</form>

<script>
//code of the md5() function
function md5(string){function RotateLeft(lValue,iShiftBits){return(lValue<<iShiftBits)|(lValue>>>(32-iShiftBits));}
function AddUnsigned(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);}}
function F(x,y,z){return(x&y)|((~x)&z);}
function G(x,y,z){return(x&z)|(y&(~z));}
function H(x,y,z){return(x^y^z);}
function I(x,y,z){return(y^(x|(~z)));}
function FF(a,b,c,d,x,s,ac){a=AddUnsigned(a,AddUnsigned(AddUnsigned(F(b,c,d),x),ac));return AddUnsigned(RotateLeft(a,s),b);};function GG(a,b,c,d,x,s,ac){a=AddUnsigned(a,AddUnsigned(AddUnsigned(G(b,c,d),x),ac));return AddUnsigned(RotateLeft(a,s),b);};function HH(a,b,c,d,x,s,ac){a=AddUnsigned(a,AddUnsigned(AddUnsigned(H(b,c,d),x),ac));return AddUnsigned(RotateLeft(a,s),b);};function II(a,b,c,d,x,s,ac){a=AddUnsigned(a,AddUnsigned(AddUnsigned(I(b,c,d),x),ac));return AddUnsigned(RotateLeft(a,s),b);};function ConvertToWordArray(string){var lWordCount;var lMessageLength=string.length;var lNumberOfWords_temp1=lMessageLength+8;var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;var lNumberOfWords=(lNumberOfWords_temp2+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;};function WordToHex(lValue){var WordToHexValue='',WordToHexValue_temp='',lByte,lCount;for(lCount=0;lCount<=3;lCount++){lByte=(lValue>>>(lCount*8))&255;WordToHexValue_temp='0'+lByte.toString(16);WordToHexValue=WordToHexValue+WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);}
return WordToHexValue;};function Utf8Encode(string){string=string.replace(/\r\n/g,'\n');var utftext='';for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c);}
else if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128);}
else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);utftext+=String.fromCharCode((c&63)|128);}}
return utftext;};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 temp=WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);return temp.toLowerCase();}

// register onclick events for 'Get MD5' button
document.getElementById('codemd5').onclick = function() {
 var txt_string = document.getElementById('strex').value; // gets data from input text

 // encrypts data and adds it in #strmd5 element
 document.getElementById('strmd5').value = md5(txt_string);
 return false;
}
</script>
Demo:
Enter a text:

MD5 hash string:

Daily Test with Code Example

HTML
CSS
JavaScript
PHP-MySQL
Which attribute specifies the HTTP method (GET, POST) used to submit the form-data?
action method value
<form action="script.php" method="post"> ... </form>
Which CSS property allows to add shadow to boxes?
background-image box-shadow border-radius
#id {
  background-color: #bbfeda;
  box-shadow: 11px 11px 5px #7878da;
}
Which function removes the first element from an array?
pop() push() shift()
var fruits = ["apple", "apricot", "banana"];
fruits.shift();
alert(fruits.length);           // 2
Indicate the function that can be used to check if a PHP extension is instaled.
function() filetype() extension_loaded()
if(extension_loaded("PDO") === true) echo "PDO is available."
MD5 hash string in JavaScript

Last accessed pages

  1. CSS Trapezoid Shape (11425)
  2. Writings for My Brother (456)
  3. Create simple Website with PHP (44156)
  4. Writing PHP scripts (11229)
  5. Courses Web: PHP-MySQL JavaScript Node.js Ajax HTML CSS (143672)

Popular pages this month

  1. Courses Web: PHP-MySQL JavaScript Node.js Ajax HTML CSS (120)
  2. CSS cursor property - Custom Cursors (13)
  3. PHP Unzipper - Extract Zip, Rar Archives (13)
  4. PHP-MySQL free course, online tutorials PHP MySQL code (12)
  5. JavaScript trim, rtrim and ltrim (11)