|
本帖最后由 QAQ 于 2019-4-13 09:06 编辑
- <?php
- define("ss",[[7,12,17,22],[5,9,14,20],[4,11,16,23],[6,10,15,21]]);
- define("ti",[
- 0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
- 0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,
- 0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,
- 0xa679438e,0x49b40821,0xf61e2562,0xc040b340,0x265e5a51,
- 0xe9b6c7aa,0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
- 0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,0xa9e3e905,
- 0xfcefa3f8,0x676f02d9,0x8d2a4c8a,0xfffa3942,0x8771f681,
- 0x6d9d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,
- 0xbebfbc70,0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,
- 0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,0xf4292244,
- 0x432aff97,0xab9423a7,0xfc93a039,0x655b59c3,0x8f0ccc92,
- 0xffeff47d,0x85845dd1,0x6fa87e4f,0xfe2ce6e0,0xa3014314,
- 0x4e0811a1,0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391
- ]);
- function and32(&$value){
- $value&= 0xFFFFFFFF;
- }
- function rol32($v,$b){
- and32($v);
- $b &= 31;
- $v = $v << $b | $v >> 32-$b;
- return $v;
- }
- function ReverseShortBytes($short){
- return ($short&255)<<8|($short>>8);
- }
- function ReverseIntBytes($int){
- return ReverseShortBytes($int & 0xFFFF) << 16 | ReverseShortBytes($int >> 16);
- }
- function bin2array($bin){
- $return = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
- for($i=0;$i<64;$i++){
- $return[$i>>2] |= ord($bin[$i]) << (($i&3)<<3);
- }
- return $return;
- }
- function dechex8($value,$rib = 0){
- and32($value);
- $value = $rib ? ReverseIntBytes($value) : $value;
- $return = dechex($value);
- do {
- $return = chr(48).$return;
- } while(strlen($return) < 8);
- return substr($return,-8);
- }
- function md5_($data,$raw = 0){
- $AA = 0x67452301;$BB = 0xefcdab89;
- $CC = 0x98badcfe;$DD = 0x10325476;
- $len = strlen($data);
- $gn=(($len+8)>>6)+1;
- $s128 = 0;
- $data64 = str_split($data,64);
- for($i=1;$i<=$gn;$i++){
- $len64 = strlen($data64[$i-1] ?? null);
- if(!$len64) $data64[$i-1] = null;
- if($len64 != 64){
- if(!$s128){
- $s128 = 1;
- $len64++;
- $data64[$i-1].=chr(128);
- }
- $k = $i == $gn ? 56 : 64;
- for($j=$len64;$j<$k;$j++){
- $data64[$i-1].=chr(0);
- }
- if($k == 56){
- $hex = dechex($len << 3);
- do {
- $hex = chr(48).$hex;
- } while(strlen($hex) <16);
- $hex = substr($hex,-16);
- $data64[$i-1].= strrev(hex2bin($hex));
- }
-
- }
- $d16 = bin2array($data64[$i-1]);
- $A = $AA;$B=$BB;$C=$CC;$D=$DD;
- for($a=0;$a<64;$a++){
- switch($a>>4){
- case 0:$g=($B&$C)|((~$B)&$D);$c=$a;break;
- case 1:$g=($D&$B)|((~$D)&$C);$c=5*$a+1;break;
- case 2:$g=$B^$C^$D;$c=3*$a+5;break;
- case 3:$g=$C^($B|(~$D));$c=7*$a;break;
- }
- $A=$B+rol32($A+$g+$d16[$c&15]+ti[$a],ss[$a>>4][$a&3]);
- $aa=$A;$bb=$B;$cc=$C;$dd=$D;
- $A=$dd;$B=$aa;$C=$bb;$D=$cc;
- }
- $AA+=$A;$BB+=$B;$CC+=$C;$DD+=$D;
- and32($AA);and32($BB);
- and32($CC);and32($DD);
- }
- $return = dechex8($AA,1);
- $return .= dechex8($BB,1);
- $return .= dechex8($CC,1);
- $return .= dechex8($DD,1);
- return $raw ? hex2bin($return) : $return;
- }
- //=========================================
- $len = 0;
- while(1){
- $data = null;
- for($i=0;$i<$len;$i++){
- $data.=chr(rand(0,255));
- }
- $b = rand(0,1);
- $user_md5 = md5_($data,$b);
- $system_md5 = md5($data,$b);
- if($user_md5 != $system_md5){
- exit("Error! {$len} {$user_md5} {$system_md5}");
- while(1);
- } else {
- echo "OK!! {$len} {$user_md5}\r\n";
- }
- $len++;
- }
- ?>
复制代码 |
|