Advertisement
Bazze

Javascript MD5 hasher

Jan 21st, 2012
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>MD5 hasher</title>
  5.    
  6.     <script type="text/javascript">
  7.     var id = 0;
  8.     /**
  9.     *
  10.     *  MD5 (Message-Digest Algorithm)
  11.     *  http://www.webtoolkit.info/
  12.     *
  13.     **/
  14.  
  15.     var MD5 = function(string) {
  16.  
  17.         function RotateLeft(lValue, iShiftBits) {
  18.             return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
  19.         }
  20.  
  21.         function AddUnsigned(lX,lY) {
  22.             var lX4,lY4,lX8,lY8,lResult;
  23.             lX8 = (lX & 0x80000000);
  24.             lY8 = (lY & 0x80000000);
  25.             lX4 = (lX & 0x40000000);
  26.             lY4 = (lY & 0x40000000);
  27.             lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
  28.             if (lX4 & lY4) {
  29.                 return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
  30.             }
  31.             if (lX4 | lY4) {
  32.                 if (lResult & 0x40000000) {
  33.                     return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
  34.                 } else {
  35.                     return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
  36.                 }
  37.             } else {
  38.                 return (lResult ^ lX8 ^ lY8);
  39.             }
  40.         }
  41.  
  42.         function F(x,y,z) { return (x & y) | ((~x) & z); }
  43.         function G(x,y,z) { return (x & z) | (y & (~z)); }
  44.         function H(x,y,z) { return (x ^ y ^ z); }
  45.         function I(x,y,z) { return (y ^ (x | (~z))); }
  46.  
  47.         function FF(a,b,c,d,x,s,ac) {
  48.             a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
  49.             return AddUnsigned(RotateLeft(a, s), b);
  50.         };
  51.  
  52.         function GG(a,b,c,d,x,s,ac) {
  53.             a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
  54.             return AddUnsigned(RotateLeft(a, s), b);
  55.         };
  56.  
  57.         function HH(a,b,c,d,x,s,ac) {
  58.             a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
  59.             return AddUnsigned(RotateLeft(a, s), b);
  60.         };
  61.  
  62.         function II(a,b,c,d,x,s,ac) {
  63.             a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
  64.             return AddUnsigned(RotateLeft(a, s), b);
  65.         };
  66.  
  67.         function ConvertToWordArray(string) {
  68.             var lWordCount;
  69.             var lMessageLength = string.length;
  70.             var lNumberOfWords_temp1=lMessageLength + 8;
  71.             var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
  72.             var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
  73.             var lWordArray=Array(lNumberOfWords-1);
  74.             var lBytePosition = 0;
  75.             var lByteCount = 0;
  76.             while ( lByteCount < lMessageLength ) {
  77.                 lWordCount = (lByteCount-(lByteCount % 4))/4;
  78.                 lBytePosition = (lByteCount % 4)*8;
  79.                 lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
  80.                 lByteCount++;
  81.             }
  82.             lWordCount = (lByteCount-(lByteCount % 4))/4;
  83.             lBytePosition = (lByteCount % 4)*8;
  84.             lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
  85.             lWordArray[lNumberOfWords-2] = lMessageLength<<3;
  86.             lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
  87.             return lWordArray;
  88.         };
  89.  
  90.         function WordToHex(lValue) {
  91.             var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
  92.             for (lCount = 0;lCount<=3;lCount++) {
  93.                 lByte = (lValue>>>(lCount*8)) & 255;
  94.                 WordToHexValue_temp = "0" + lByte.toString(16);
  95.                 WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
  96.             }
  97.             return WordToHexValue;
  98.         };
  99.  
  100.         function Utf8Encode(string) {
  101.             string = string.replace(/\r\n/g,"\n");
  102.             var utftext = "";
  103.  
  104.             for (var n = 0; n < string.length; n++) {
  105.  
  106.                 var c = string.charCodeAt(n);
  107.  
  108.                 if (c < 128) {
  109.                     utftext += String.fromCharCode(c);
  110.                 }
  111.                 else if((c > 127) && (c < 2048)) {
  112.                     utftext += String.fromCharCode((c >> 6) | 192);
  113.                     utftext += String.fromCharCode((c & 63) | 128);
  114.                 }
  115.                 else {
  116.                     utftext += String.fromCharCode((c >> 12) | 224);
  117.                     utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  118.                     utftext += String.fromCharCode((c & 63) | 128);
  119.                 }
  120.  
  121.             }
  122.  
  123.             return utftext;
  124.         };
  125.  
  126.         var x=Array();
  127.         var k,AA,BB,CC,DD,a,b,c,d;
  128.         var S11=7, S12=12, S13=17, S14=22;
  129.         var S21=5, S22=9 , S23=14, S24=20;
  130.         var S31=4, S32=11, S33=16, S34=23;
  131.         var S41=6, S42=10, S43=15, S44=21;
  132.  
  133.         string = Utf8Encode(string);
  134.  
  135.         x = ConvertToWordArray(string);
  136.  
  137.         a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
  138.  
  139.         for (k=0;k<x.length;k+=16) {
  140.             AA=a; BB=b; CC=c; DD=d;
  141.             a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
  142.             d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
  143.             c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
  144.             b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
  145.             a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
  146.             d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
  147.             c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
  148.             b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
  149.             a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
  150.             d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
  151.             c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
  152.             b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
  153.             a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
  154.             d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
  155.             c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
  156.             b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
  157.             a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
  158.             d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
  159.             c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
  160.             b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
  161.             a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
  162.             d=GG(d,a,b,c,x[k+10],S22,0x2441453);
  163.             c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
  164.             b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
  165.             a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
  166.             d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
  167.             c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
  168.             b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
  169.             a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
  170.             d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
  171.             c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
  172.             b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
  173.             a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
  174.             d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
  175.             c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
  176.             b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
  177.             a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
  178.             d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
  179.             c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
  180.             b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
  181.             a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
  182.             d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
  183.             c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
  184.             b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
  185.             a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
  186.             d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
  187.             c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
  188.             b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
  189.             a=II(a,b,c,d,x[k+0], S41,0xF4292244);
  190.             d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
  191.             c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
  192.             b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
  193.             a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
  194.             d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
  195.             c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
  196.             b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
  197.             a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
  198.             d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
  199.             c=II(c,d,a,b,x[k+6], S43,0xA3014314);
  200.             b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
  201.             a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
  202.             d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
  203.             c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
  204.             b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
  205.             a=AddUnsigned(a,AA);
  206.             b=AddUnsigned(b,BB);
  207.             c=AddUnsigned(c,CC);
  208.             d=AddUnsigned(d,DD);
  209.         }
  210.  
  211.         var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
  212.  
  213.         return temp.toLowerCase();
  214.     }
  215.     function fnSelect(objId) {
  216.         fnDeSelect();
  217.         if (document.selection) {
  218.             var range = document.body.createTextRange();
  219.             range.moveToElementText(document.getElementById(objId));
  220.             range.select();
  221.         } else if (window.getSelection) {
  222.             var range = document.createRange();
  223.             range.selectNode(document.getElementById(objId));
  224.             window.getSelection().addRange(range);
  225.         }
  226.     }
  227.     function fnDeSelect() {
  228.         if (document.selection) {
  229.             document.selection.empty();
  230.         } else if (window.getSelection) {
  231.             window.getSelection().removeAllRanges();
  232.         }
  233.     }
  234.     function hash() {
  235.         var plaintext = document.getElementById('msg');
  236.         var history = document.getElementById('history');
  237.         history.innerHTML = history.innerHTML + '#&nbspMD5(' + plaintext.value + ') = <span id="hash-' + id + '">' + MD5(plaintext.value) + '</span><br />';
  238.         plaintext.value = "";
  239.         if (document.getElementById('autoselect').checked == true) {
  240.             fnSelect("hash-" + id);
  241.         }
  242.         id++;
  243.         return false;
  244.     }
  245.     </script>
  246.     <style type="text/css">
  247.     * {
  248.         margin:0;
  249.         padding:0;
  250.         font-family: "Courier New";
  251.         font-size:14px;
  252.         background-color: #000;
  253.         color: #6FFF56;
  254.         border:0;
  255.         outline: 0;
  256.         resize: 0;
  257.     }
  258.     input {
  259.         width: 98%;
  260.         display:inline;
  261.     }
  262.     </style>
  263. </head>
  264. <body>
  265.     <div id="history">
  266.         <p style="margin-bottom:5px;">Type in the text you want to hash and hit ENTER</p>
  267.     </div>
  268.    
  269.     <span style="display:inline;">#&nbsp;</span><input type="text" id="msg" name="msg" value="" onkeyup="if (event.keyCode == 13) { hash(); }" /> <br /><br />
  270.     <input type="checkbox" id="autoselect" name="autoselect" style="width:auto;" checked="checked" value="1" /><span>&nbsp;Auto select hash</span>
  271.     <script type="text/javascript">
  272.     document.getElementById('msg').focus();
  273.     </script>
  274.  
  275. </body>
  276. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement