рдЕрдВрджрд░ рдЖрдУ! рдпреВрдЬрд░рдиреЗрдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ

рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ?



рд╡реЗрдм-рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдЗрдЯ рдореЗрдВ рдЬрд╛рдиреЗ рджреЗрдирд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╣ рдЙрд╕реЗ рдЕрдзрд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИред



рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:



рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдкрддреНрд░ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП URL рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдХреБрдВрдЬреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:



рдореИрдВрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХреНрд╖реЗрддреНрд░ рдпрд╛ рдПрдХ рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╛рдзрд╛рди (рдФрд░ рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдЙрдирд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдпрд╛) рджреЗрдЦрд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдЯ рдкрд░ рдЖрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХреБрдВрдЬреА рдХреБрдЫ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: sha1 ($ userIdред "Secret_key"ред рд╕рдордп ());



рдмрд╣реБрдд рдмрд╛рд░, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдирд┐рд░реНрдгрдп рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрд╕рдХрд╛ рд╕реНрдерд╛рди рд╕рдмрд╕реЗ рдЕрдВрдд рдореЗрдВ рд╣реИред



рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ "рдЫреЛрдЯреЗ рд░рдХреНрдд" рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред



рдХреНрдпрд╛ рдХрд░реЗрдВ?



рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рдореБрдЦ рдЧреБрдгреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрдХреНрд╕рд░ рдЗрд╕ рдкрд░ рдЕрдиреНрдп рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдирд╕реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдиреГрддреНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдлреЙрд░реНрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: sha1 ($ userIdред "Secret_key"); рдпрд╛ sha1 ($ userIdред "secret_key"ред "confirm_code");



рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрджрд╛рд╣рд░рдг URL рдкрд░ рдРрд╕реА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдЯ рдкрд░ рдЖрддрд╛ рд╣реИ, рдЬреИрд╕реЗ example.com/users/%user_id%?t=%key% , рддреЛ рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред



рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди:



рдиреБрдХрд╕рд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдХреБрдВрдЬреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдЯреЛрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ - рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВред

Php рдореЗрдВ, Mcrypt рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ pecl рдпрд╛ рдЖрдкрдХреЗ OS рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рд╕реНрд╡рдпрдВ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ - рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкрд╛рда рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред



рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИред рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЕрдкрдиреА рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ URL-рд╕реБрд░рдХреНрд╖рд┐рдд рджреГрд╢реНрдп рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рдВрдХ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдПрдЧрд╛ред



рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдХреБрдВрдЬреА рдореЗрдВ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреБрдВрдЬреА рдЙрддрдиреА рд╣реА рд▓рдВрдмреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓рд╛ рд╣реИрд╢ рдирд╣реАрдВ рд╣реИред



рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреБрдВрдЬреА рдореЗрдВ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛:



рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдкрд░рд┐рдгрд╛рдореА рдХреБрдВрдЬреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ : 67147328f43d69f7784770a2d9c84b181a8c ред

рдЖрдк рдЪрд╛рдмреА рдореЗрдВ рдХреНрдпрд╛ рд░рдЦреЗрдВрдЧреЗ, рдпрд╣ рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рдХреБрдВрдЬреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реВрдЪрдирд╛ рдХреЗ 18 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдлрд┐рдЯ рдХрд░ рд╕рдХрддреА рд╣реИред



рдЖрдЗрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдореИрдВрдиреЗ рджреЛ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред



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/>











рдХреБрдВрдЬреА рд╕реНрд╡рдпрдВ :: $ рдХреБрдВрдЬреА рдФрд░ рд╕реНрд╡рдпрдВ :: $ iv рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдмреЗрд╣рддрд░ рд╣реИрдВред



(string) AuthToken :: create ($ id, $ expire = 0, $ mode = 0)

рдПрдХ рдХреБрдВрдЬреА рдмрдирд╛рддрд╛ рд╣реИред



(рдорд┐рд╢реНрд░рд┐рдд) AuthToken :: рдЬрд╛рдБрдЪ ($ рдЯреЛрдХрди, $ рдореЛрдб = рд╢реВрдиреНрдп)

рдХреБрдВрдЬреА рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛, рддрд╛рд░реНрдХрд┐рдХ FALSEред



рдпрджрд┐ рдЖрдк $ рдПрдХреНрд╕рдкрд╛рдпрд░ рдФрд░ / рдпрд╛ $ рдореЛрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдВрдЬреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рдЙрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди $ рдореЛрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рднреА рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЕрдЧрд░ рдмрд╛рдХреА рд╕рдм рдлреЗрд▓ рд╣реЛ рдЬрд╛рдП рддреЛ?



рдЕрдЧрд░ рдЖрдкрдХреЛ рдПрдХрдореБрд╢реНрдд рдХреБрдВрдЬреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рддреЛ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЫреЛрдЯреА рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА рдХреА рд╕реАрдорд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдореЗрдордЪ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдЪреЗрдХ рдЭрдВрдбреЗ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛ред



рдЦреИрд░, рдлрд┐рд░ - рдпрд╛ рддреЛ рдПрдХ рдХрд▓реНрдкрдирд╛ рдпрд╛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ред



All Articles