Copy Source | Copy HTML<br/> <?php <br/> <br/> class AuthToken {<br/> private static $key = " " ;<br/> private static $iv = " , " ;<br/> <br/> private static function int2char( $int ) {<br/> $char = "" ;<br/> $hex = sprintf( "%08x" , $int );<br/> for ( $i = 0 ; $i < 4 ; $i ++) {<br/> $char .= chr(hexdec(substr( $hex , $i * 2 , 2 )));<br/> }<br/> return $char ;<br/> }<br/> <br/> private static function char2int( $char ) {<br/> $int = 0 ;<br/> $hex = "" ;<br/> for ( $i = 0 ; $i < 4 ; $i ++) {<br/> $hex .= sprintf( "%02x" , ord( $char { $i }));<br/> }<br/> $int = hexdec( $hex );<br/> return $int ;<br/> }<br/> <br/> public static function create( $id , $expire = 0 , $mode = 0 ) {<br/> $id = intval( $id );<br/> $expire = intval( $expire );<br/> $mode = intval( $mode );<br/> if ( $id < 0 || $expire < 0 || $mode < 0 ) {<br/> return null ;<br/> }<br/> <br/> $info = array ();<br/> $info [ "id" ] = $id ;<br/> $info [ "time" ] = time();<br/> $info [ "expire" ] = $expire ;<br/> $info [ "mode" ] = $mode ;<br/> $info [ "rnd" ] = ceil(mt_rand( 0 , 255 ));<br/> $info [ "sum" ] = $info [ "time" ] - $info [ "expire" ] - $info [ "mode" ] - $info [ "rnd" ] - $info [ "id" ];<br/> $info = self::int2char( $info [ "id" ]) . self::int2char( $info [ "time" ]) . self::int2char( $info [ "expire" ]) . chr( $info [ "mode" ]) . chr( $info [ "rnd" ]) . self::int2char( $info [ "sum" ]);<br/> <br/> $token = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(self:: $key ), $info , MCRYPT_MODE_OFB, md5(self:: $iv ));<br/> $tokenHex = "" ;<br/> $tokenLength = strlen( $token );<br/> for ( $i = 0 ; $i < $tokenLength ; $i ++) {<br/> $tokenHex .= sprintf( "%02x" , ord( $token { $i }));<br/> }<br/> return $tokenHex ;<br/> }<br/> <br/> public static function check( $tokenHex , $mode = null ) {<br/> $token = "" ;<br/> $tokenHexLength = strlen( $tokenHex ) / 2 ;<br/> for ( $i = 0 ; $i < $tokenHexLength ; $i ++) {<br/> $token .= chr(hexdec(substr( $tokenHex , $i * 2 , 2 )));<br/> }<br/> $info = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5(self:: $key ), $token , MCRYPT_MODE_OFB, md5(self:: $iv ));<br/> if (strlen( $info ) == 18 ) {<br/> $info = array ( "id" => self::char2int(substr( $info , 0 , 4 )), "time" => self::char2int(substr( $info , 4 , 4 )), "expire" => self::char2int(substr( $info , 8 , 4 )), "mode" => ord( $info { 12 }), "rnd" => ord( $info { 13 }), "sum" => self::char2int(substr( $info , 14 , 4 )));<br/> if ( $info [ "sum" ] == $info [ "time" ] - $info [ "expire" ] - $info [ "mode" ] - $info [ "rnd" ] - $info [ "id" ]) {<br/> if ( $info [ "expire" ] > 0 ) {<br/> if ( $info [ "expire" ] + $info [ "time" ] < time()) {<br/> return false ;<br/> }<br/> }<br/> if ( $info [ "mode" ] > 0 ) {<br/> if ( $mode !== null ) {<br/> if ( $info [ "mode" ] != $mode ) {<br/> return false ;<br/> }<br/> }<br/> }<br/> return $info [ "id" ];<br/> } else {<br/> return false ;<br/> }<br/> } else {<br/> return false ;<br/> }<br/> }<br/>}<br/> <br/> ?> <br/> <br/>
Copy Source | Copy HTML<br/> <?php <br/> <br/> class AuthToken {<br/> private static $key = " " ;<br/> private static $iv = " , " ;<br/> <br/> private static function int2char( $int ) {<br/> $char = "" ;<br/> $hex = sprintf( "%08x" , $int );<br/> for ( $i = 0 ; $i < 4 ; $i ++) {<br/> $char .= chr(hexdec(substr( $hex , $i * 2 , 2 )));<br/> }<br/> return $char ;<br/> }<br/> <br/> private static function char2int( $char ) {<br/> $int = 0 ;<br/> $hex = "" ;<br/> for ( $i = 0 ; $i < 4 ; $i ++) {<br/> $hex .= sprintf( "%02x" , ord( $char { $i }));<br/> }<br/> $int = hexdec( $hex );<br/> return $int ;<br/> }<br/> <br/> public static function create( $id , $expire = 0 , $mode = 0 ) {<br/> $id = intval( $id );<br/> $expire = intval( $expire );<br/> $mode = intval( $mode );<br/> if ( $id < 0 || $expire < 0 || $mode < 0 ) {<br/> return null ;<br/> }<br/> <br/> $info = array ();<br/> $info [ "id" ] = $id ;<br/> $info [ "time" ] = time();<br/> $info [ "expire" ] = $expire ;<br/> $info [ "mode" ] = $mode ;<br/> $info [ "rnd" ] = ceil(mt_rand( 0 , 255 ));<br/> $info [ "sum" ] = $info [ "time" ] - $info [ "expire" ] - $info [ "mode" ] - $info [ "rnd" ] - $info [ "id" ];<br/> $info = self::int2char( $info [ "id" ]) . self::int2char( $info [ "time" ]) . self::int2char( $info [ "expire" ]) . chr( $info [ "mode" ]) . chr( $info [ "rnd" ]) . self::int2char( $info [ "sum" ]);<br/> <br/> $token = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(self:: $key ), $info , MCRYPT_MODE_OFB, md5(self:: $iv ));<br/> $tokenHex = "" ;<br/> $tokenLength = strlen( $token );<br/> for ( $i = 0 ; $i < $tokenLength ; $i ++) {<br/> $tokenHex .= sprintf( "%02x" , ord( $token { $i }));<br/> }<br/> return $tokenHex ;<br/> }<br/> <br/> public static function check( $tokenHex , $mode = null ) {<br/> $token = "" ;<br/> $tokenHexLength = strlen( $tokenHex ) / 2 ;<br/> for ( $i = 0 ; $i < $tokenHexLength ; $i ++) {<br/> $token .= chr(hexdec(substr( $tokenHex , $i * 2 , 2 )));<br/> }<br/> $info = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5(self:: $key ), $token , MCRYPT_MODE_OFB, md5(self:: $iv ));<br/> if (strlen( $info ) == 18 ) {<br/> $info = array ( "id" => self::char2int(substr( $info , 0 , 4 )), "time" => self::char2int(substr( $info , 4 , 4 )), "expire" => self::char2int(substr( $info , 8 , 4 )), "mode" => ord( $info { 12 }), "rnd" => ord( $info { 13 }), "sum" => self::char2int(substr( $info , 14 , 4 )));<br/> if ( $info [ "sum" ] == $info [ "time" ] - $info [ "expire" ] - $info [ "mode" ] - $info [ "rnd" ] - $info [ "id" ]) {<br/> if ( $info [ "expire" ] > 0 ) {<br/> if ( $info [ "expire" ] + $info [ "time" ] < time()) {<br/> return false ;<br/> }<br/> }<br/> if ( $info [ "mode" ] > 0 ) {<br/> if ( $mode !== null ) {<br/> if ( $info [ "mode" ] != $mode ) {<br/> return false ;<br/> }<br/> }<br/> }<br/> return $info [ "id" ];<br/> } else {<br/> return false ;<br/> }<br/> } else {<br/> return false ;<br/> }<br/> }<br/>}<br/> <br/> ?> <br/> <br/>
Copy Source | Copy HTML<br/> <?php <br/> <br/> class AuthToken {<br/> private static $key = " " ;<br/> private static $iv = " , " ;<br/> <br/> private static function int2char( $int ) {<br/> $char = "" ;<br/> $hex = sprintf( "%08x" , $int );<br/> for ( $i = 0 ; $i < 4 ; $i ++) {<br/> $char .= chr(hexdec(substr( $hex , $i * 2 , 2 )));<br/> }<br/> return $char ;<br/> }<br/> <br/> private static function char2int( $char ) {<br/> $int = 0 ;<br/> $hex = "" ;<br/> for ( $i = 0 ; $i < 4 ; $i ++) {<br/> $hex .= sprintf( "%02x" , ord( $char { $i }));<br/> }<br/> $int = hexdec( $hex );<br/> return $int ;<br/> }<br/> <br/> public static function create( $id , $expire = 0 , $mode = 0 ) {<br/> $id = intval( $id );<br/> $expire = intval( $expire );<br/> $mode = intval( $mode );<br/> if ( $id < 0 || $expire < 0 || $mode < 0 ) {<br/> return null ;<br/> }<br/> <br/> $info = array ();<br/> $info [ "id" ] = $id ;<br/> $info [ "time" ] = time();<br/> $info [ "expire" ] = $expire ;<br/> $info [ "mode" ] = $mode ;<br/> $info [ "rnd" ] = ceil(mt_rand( 0 , 255 ));<br/> $info [ "sum" ] = $info [ "time" ] - $info [ "expire" ] - $info [ "mode" ] - $info [ "rnd" ] - $info [ "id" ];<br/> $info = self::int2char( $info [ "id" ]) . self::int2char( $info [ "time" ]) . self::int2char( $info [ "expire" ]) . chr( $info [ "mode" ]) . chr( $info [ "rnd" ]) . self::int2char( $info [ "sum" ]);<br/> <br/> $token = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(self:: $key ), $info , MCRYPT_MODE_OFB, md5(self:: $iv ));<br/> $tokenHex = "" ;<br/> $tokenLength = strlen( $token );<br/> for ( $i = 0 ; $i < $tokenLength ; $i ++) {<br/> $tokenHex .= sprintf( "%02x" , ord( $token { $i }));<br/> }<br/> return $tokenHex ;<br/> }<br/> <br/> public static function check( $tokenHex , $mode = null ) {<br/> $token = "" ;<br/> $tokenHexLength = strlen( $tokenHex ) / 2 ;<br/> for ( $i = 0 ; $i < $tokenHexLength ; $i ++) {<br/> $token .= chr(hexdec(substr( $tokenHex , $i * 2 , 2 )));<br/> }<br/> $info = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5(self:: $key ), $token , MCRYPT_MODE_OFB, md5(self:: $iv ));<br/> if (strlen( $info ) == 18 ) {<br/> $info = array ( "id" => self::char2int(substr( $info , 0 , 4 )), "time" => self::char2int(substr( $info , 4 , 4 )), "expire" => self::char2int(substr( $info , 8 , 4 )), "mode" => ord( $info { 12 }), "rnd" => ord( $info { 13 }), "sum" => self::char2int(substr( $info , 14 , 4 )));<br/> if ( $info [ "sum" ] == $info [ "time" ] - $info [ "expire" ] - $info [ "mode" ] - $info [ "rnd" ] - $info [ "id" ]) {<br/> if ( $info [ "expire" ] > 0 ) {<br/> if ( $info [ "expire" ] + $info [ "time" ] < time()) {<br/> return false ;<br/> }<br/> }<br/> if ( $info [ "mode" ] > 0 ) {<br/> if ( $mode !== null ) {<br/> if ( $info [ "mode" ] != $mode ) {<br/> return false ;<br/> }<br/> }<br/> }<br/> return $info [ "id" ];<br/> } else {<br/> return false ;<br/> }<br/> } else {<br/> return false ;<br/> }<br/> }<br/>}<br/> <br/> ?> <br/> <br/>
Source: https://habr.com/ru/post/109421/
All Articles