fenska Posted June 28, 2012 Share Posted June 28, 2012 hi folks. i just tried to convert someone else script about md5 implementation to PHP language. so here i tried, but i give an error at result javascript (working) <script> function rhex(num) { str = ""; var hex_chr = "0123456789abcdef"; for(j = 0; j <= 3; j++) str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) + hex_chr.charAt((num >> (j * ) & 0x0F); return str; } /* * Convert a string to a sequence of 16-word blocks, stored as an array. * Append padding bits and the length, as described in the MD5 standard. */ function str2blks_MD5(str) { nblk = ((str.length + >> 6) + 1; blks = new Array(nblk * 16); for(i = 0; i < nblk * 16; i++) blks[i] = 0; for(i = 0; i < str.length; i++) blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * ; blks[i >> 2] |= 0x80 << ((i % 4) * ; blks[nblk * 16 - 2] = str.length * 8; return blks; } /* * Add integers, wrapping at 2^32. This uses 16-bit operations internally * to work around bugs in some JS interpreters. */ function add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } /* * Bitwise rotate a 32-bit number to the left */ function rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)); } /* * These functions implement the basic operation for each round of the * algorithm. */ function cmn(q, a, b, x, s, t) { return add(rol(add(add(a, q), add(x, t)), 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); } /* * Take a string and return the hex representation of its MD5. */ function calcMD5(str) { x = str2blks_MD5(str); a = 1732584193; b = -271733879; c = -1732584194; d = 271733878; for(i = 0; i < x.length; i += 16) { olda = a; oldb = b; oldc = c; oldd = d; var i = 0; a = ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = ff(d, a, b, c, x[i+ 1], 12, -389564586); c = ff(c, d, a, b, x[i+ 2], 17, 606105819); b = ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = ff(b, c, d, a, x[i+ 7], 22, -45705983); a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = ff(c, d, a, b, x[i+10], 17, -42063); b = ff(b, c, d, a, x[i+11], 22, -1990404162); a = ff(a, b, c, d, x[i+12], 7 , 1804603682); d = ff(d, a, b, c, x[i+13], 12, -40341101); c = ff(c, d, a, b, x[i+14], 17, -1502002290); b = ff(b, c, d, a, x[i+15], 22, 1236535329); a = gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = gg(c, d, a, b, x[i+11], 14, 643717713); b = gg(b, c, d, a, x[i+ 0], 20, -373897302); a = gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = gg(d, a, b, c, x[i+10], 9 , 38016083); c = gg(c, d, a, b, x[i+15], 14, -660478335); b = gg(b, c, d, a, x[i+ 4], 20, -405537848); a = gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = gg(d, a, b, c, x[i+14], 9 , -1019803690); c = gg(c, d, a, b, x[i+ 3], 14, -187363961); b = gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = gg(a, b, c, d, x[i+13], 5 , -1444681467); d = gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = gg(b, c, d, a, x[i+12], 20, -1926607734); a = hh(a, b, c, d, x[i+ 5], 4 , -378558); d = hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = hh(c, d, a, b, x[i+11], 16, 1839030562); b = hh(b, c, d, a, x[i+14], 23, -35309556); a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = hh(c, d, a, b, x[i+ 7], 16, -155497632); b = hh(b, c, d, a, x[i+10], 23, -1094730640); a = hh(a, b, c, d, x[i+13], 4 , 681279174); d = hh(d, a, b, c, x[i+ 0], 11, -358537222); c = hh(c, d, a, b, x[i+ 3], 16, -722521979); b = hh(b, c, d, a, x[i+ 6], 23, 76029189); a = hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = hh(d, a, b, c, x[i+12], 11, -421815835); c = hh(c, d, a, b, x[i+15], 16, 530742520); b = hh(b, c, d, a, x[i+ 2], 23, -995338651); a = ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = ii(c, d, a, b, x[i+14], 15, -1416354905); b = ii(b, c, d, a, x[i+ 5], 21, -57434055); a = ii(a, b, c, d, x[i+12], 6 , 1700485571); d = ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = ii(c, d, a, b, x[i+10], 15, -1051523); b = ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = ii(d, a, b, c, x[i+15], 10, -30611744); c = ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = ii(b, c, d, a, x[i+13], 21, 1309151649); a = ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = ii(d, a, b, c, x[i+11], 10, -1120210379); c = ii(c, d, a, b, x[i+ 2], 15, 718787259); b = ii(b, c, d, a, x[i+ 9], 21, -343485551); a = add(a, olda); b = add(b, oldb); c = add(c, oldc); d = add(d, oldd); } return rhex(a) + rhex(b) + rhex(c) + rhex(d); } var result = calcMD5('test'); document.write(result); </script> and my translation in php <?php function zeroFill($a,$b) { if($a >= 0) { return bindec(decbin($a>>$b)); } $bin = decbin($a>>$b); $bin = substr($bin, $b); $o = bindec($bin); return $o; } function str_to_blocks($str) { $nblk = ((strlen($str) + >> 6) + 1; $blks = new SplFixedArray($nblk*16); for($i=0; $i<$nblk*16; $i++) { $blks[$i] = 0; } for($i=0; $i<strlen($str); $i++) { $blks[$i >> 2] |= ord(substr($str,$i)) << (($i % 4) * ; } $blks[$i >> 2] |= 0x80 << (($i % 4) * ; $blks[$nblk * 16 - 2] = strlen($str) * 8; return $blks; } function add($x, $y) { $lsw = ($x & 0xFFFF) + ($y & 0xFFFF); $msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16); return ($msw << 16) | ($lsw & 0xFFFF); } function rol($num, $cnt) { return ($num << $cnt) | (zeroFill($num,32-$cnt)); } function cmn($q, $a, $b, $x, $s, $t) { return add(rol(add(add($a, $q), add($x, $t)), $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 rhex($num) { $str = ""; $hex_chr = "0123456789abcdef"; for($j = 0; $j <= 3; $j++) $str += substr($hex_chr,($num >> ($j * 8 + 4)) & 0x0F) + substr($hex_chr,($num >> ($j * ) & 0x0F); return $str; } function hashmd5($string) { $x = str_to_blocks($string); $a = 1732584193; $b = -271733879; $c = -1732584194; $d = 271733878; for($i = 0; $i < count($x); $i+=16) { $olda = $a; $oldb = $b; $oldc = $c; $oldd = $d; /* ??? function Pad($binary, $pad_length) { $pad_length = $pad_length - strlen($binary); for($i = 0; $i < $pad_length; $i++) { $padding .= '0'; } return $padding . $binary; } for($i = 0; $i < 64; $i++) { $T[] = Pad(decbin(floor(4294967296 * abs(sin($i+1)))), 32); } */ $a = ff($a, $b, $c, $d, $x[$i+ 0], 7 , -680876936); $d = ff($d, $a, $b, $c, $x[$i+ 1], 12, -389564586); $c = ff($c, $d, $a, $b, $x[$i+ 2], 17, 606105819); $b = ff($b, $c, $d, $a, $x[$i+ 3], 22, -1044525330); $a = ff($a, $b, $c, $d, $x[$i+ 4], 7 , -176418897); $d = ff($d, $a, $b, $c, $x[$i+ 5], 12, 1200080426); $c = ff($c, $d, $a, $b, $x[$i+ 6], 17, -1473231341); $b = ff($b, $c, $d, $a, $x[$i+ 7], 22, -45705983); $a = ff($a, $b, $c, $d, $x[$i+ 8], 7 , 1770035416); $d = ff($d, $a, $b, $c, $x[$i+ 9], 12, -1958414417); $c = ff($c, $d, $a, $b, $x[$i+10], 17, -42063); $b = ff($b, $c, $d, $a, $x[$i+11], 22, -1990404162); $a = ff($a, $b, $c, $d, $x[$i+12], 7 , 1804603682); $d = ff($d, $a, $b, $c, $x[$i+13], 12, -40341101); $c = ff($c, $d, $a, $b, $x[$i+14], 17, -1502002290); $b = ff($b, $c, $d, $a, $x[$i+15], 22, 1236535329); $a = gg($a, $b, $c, $d, $x[$i+ 1], 5 , -165796510); $d = gg($d, $a, $b, $c, $x[$i+ 6], 9 , -1069501632); $c = gg($c, $d, $a, $b, $x[$i+11], 14, 643717713); $b = gg($b, $c, $d, $a, $x[$i+ 0], 20, -373897302); $a = gg($a, $b, $c, $d, $x[$i+ 5], 5 , -701558691); $d = gg($d, $a, $b, $c, $x[$i+10], 9 , 38016083); $c = gg($c, $d, $a, $b, $x[$i+15], 14, -660478335); $b = gg($b, $c, $d, $a, $x[$i+ 4], 20, -405537848); $a = gg($a, $b, $c, $d, $x[$i+ 9], 5 , 568446438); $d = gg($d, $a, $b, $c, $x[$i+14], 9 , -1019803690); $c = gg($c, $d, $a, $b, $x[$i+ 3], 14, -187363961); $b = gg($b, $c, $d, $a, $x[$i+ 8], 20, 1163531501); $a = gg($a, $b, $c, $d, $x[$i+13], 5 , -1444681467); $d = gg($d, $a, $b, $c, $x[$i+ 2], 9 , -51403784); $c = gg($c, $d, $a, $b, $x[$i+ 7], 14, 1735328473); $b = gg($b, $c, $d, $a, $x[$i+12], 20, -1926607734); $a = hh($a, $b, $c, $d, $x[$i+ 5], 4 , -378558); $d = hh($d, $a, $b, $c, $x[$i+ 8], 11, -2022574463); $c = hh($c, $d, $a, $b, $x[$i+11], 16, 1839030562); $b = hh($b, $c, $d, $a, $x[$i+14], 23, -35309556); $a = hh($a, $b, $c, $d, $x[$i+ 1], 4 , -1530992060); $d = hh($d, $a, $b, $c, $x[$i+ 4], 11, 1272893353); $c = hh($c, $d, $a, $b, $x[$i+ 7], 16, -155497632); $b = hh($b, $c, $d, $a, $x[$i+10], 23, -1094730640); $a = hh($a, $b, $c, $d, $x[$i+13], 4 , 681279174); $d = hh($d, $a, $b, $c, $x[$i+ 0], 11, -358537222); $c = hh($c, $d, $a, $b, $x[$i+ 3], 16, -722521979); $b = hh($b, $c, $d, $a, $x[$i+ 6], 23, 76029189); $a = hh($a, $b, $c, $d, $x[$i+ 9], 4 , -640364487); $d = hh($d, $a, $b, $c, $x[$i+12], 11, -421815835); $c = hh($c, $d, $a, $b, $x[$i+15], 16, 530742520); $b = hh($b, $c, $d, $a, $x[$i+ 2], 23, -995338651); $a = ii($a, $b, $c, $d, $x[$i+ 0], 6 , -198630844); $d = ii($d, $a, $b, $c, $x[$i+ 7], 10, 1126891415); $c = ii($c, $d, $a, $b, $x[$i+14], 15, -1416354905); $b = ii($b, $c, $d, $a, $x[$i+ 5], 21, -57434055); $a = ii($a, $b, $c, $d, $x[$i+12], 6 , 1700485571); $d = ii($d, $a, $b, $c, $x[$i+ 3], 10, -1894986606); $c = ii($c, $d, $a, $b, $x[$i+10], 15, -1051523); $b = ii($b, $c, $d, $a, $x[$i+ 1], 21, -2054922799); $a = ii($a, $b, $c, $d, $x[$i+ 8], 6 , 1873313359); $d = ii($d, $a, $b, $c, $x[$i+15], 10, -30611744); $c = ii($c, $d, $a, $b, $x[$i+ 6], 15, -1560198380); $b = ii($b, $c, $d, $a, $x[$i+13], 21, 1309151649); $a = ii($a, $b, $c, $d, $x[$i+ 4], 6 , -145523070); $d = ii($d, $a, $b, $c, $x[$i+11], 10, -1120210379); $c = ii($c, $d, $a, $b, $x[$i+ 2], 15, 718787259); $b = ii($b, $c, $d, $a, $x[$i+ 9], 21, -343485551); $a = add($a, $olda); $b = add($b, $oldb); $c = add($c, $oldc); $d = add($d, $oldd); } return rhex($a) + rhex($b) + rhex($c) + rhex($d); } $string="test"; echo hashmd5($string); ?> take note i have add a function for bitwise operation >>> Quote Link to comment https://forums.phpfreaks.com/topic/264935-javascript-php-conversion-give-error/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.