A super easy PHP Framework for web development!
https://github.com/exacti/phacil-framework
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.1 KiB
85 lines
2.1 KiB
<?php
|
|
/*
|
|
* Copyright © 2021 ExacTI Technology Solutions. All rights reserved.
|
|
* GPLv3 General License.
|
|
* https://exacti.com.br
|
|
* Phacil PHP Framework - https://github.com/exacti/phacil-framework
|
|
*/
|
|
|
|
namespace Phacil\Framework;
|
|
|
|
/**
|
|
* Token class
|
|
*
|
|
* @package Phacil\Framework
|
|
**/
|
|
class Token {
|
|
|
|
/**
|
|
* @param int $length
|
|
* @return string|false
|
|
* @throws Exception
|
|
*/
|
|
static public function token($length = 32) {
|
|
if(!isset($length) || intval($length) <= 8 ){
|
|
$length = 32;
|
|
}
|
|
|
|
if (function_exists('openssl_random_pseudo_bytes')) {
|
|
$token = bin2hex(openssl_random_pseudo_bytes($length));
|
|
} elseif (function_exists('random_bytes')) {
|
|
$token = bin2hex(random_bytes($length));
|
|
} elseif (function_exists('mcrypt_create_iv') && phpversion() < '7.1') {
|
|
$token = bin2hex(mcrypt_create_iv($length, MCRYPT_DEV_URANDOM));
|
|
} else {
|
|
$token = md5(rand(0, 4000).time());
|
|
}
|
|
|
|
return substr($token, -$length, $length);
|
|
}
|
|
|
|
/**
|
|
* @param string $known_string
|
|
* @param string $user_string
|
|
* @return bool
|
|
*/
|
|
static public function hash_equals($known_string, $user_string) {
|
|
$known_string = (string)$known_string;
|
|
$user_string = (string)$user_string;
|
|
|
|
if (strlen($known_string) != strlen($user_string)) {
|
|
return false;
|
|
} else {
|
|
$res = $known_string ^ $user_string;
|
|
$ret = 0;
|
|
|
|
for ($i = strlen($res) - 1; $i >= 0; $i--) $ret |= ord($res[$i]);
|
|
|
|
return !$ret;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Compatibility function with legacy resourse
|
|
* @param int $length
|
|
* @return string|false
|
|
* @throws Exception
|
|
*/
|
|
function token($length = 32) {
|
|
return Token::token($length);
|
|
}
|
|
|
|
|
|
if (!function_exists('hash_equals')) {
|
|
/**
|
|
* Compatibility function with legacy resourse
|
|
* @param string $known_string
|
|
* @param string $user_string
|
|
* @return bool
|
|
*/
|
|
function hash_equals($known_string, $user_string) {
|
|
return Token::hash_equals($known_string, $user_string);
|
|
}
|
|
} |