Token创建审核规则优化

This commit is contained in:
筱锋xiao_lfeng 2023-05-02 14:49:08 +08:00
parent 909cd1e0dc
commit c1658a8525

View File

@ -11,17 +11,14 @@ class Token
public int $Data_TokenLong; public int $Data_TokenLong;
/** @var string 生成的Token或获取的Token */ /** @var string 生成的Token或获取的Token */
public ?string $Data_Token = null; public ?string $Data_Token = null;
/** @var bool 检查是否是Token创建模式 */
public bool $Data_TokenCreate;
/** /**
* @param int|null $Token_Long 获取Token计算长度 * @param int|null $Token_Long 获取Token计算长度
* @param bool $Token_Create 是否为 Token 创建模式 * @param bool $Token_Create 是否为 Token 创建模式
*/ */
public function __construct(int $Token_Long, bool $Token_Create) public function __construct(int $Token_Long)
{ {
$this->Data_TokenLong = $Token_Long; $this->Data_TokenLong = $Token_Long;
$this->Data_TokenCreate = $Token_Create;
} }
/** /**
@ -42,20 +39,20 @@ public function getToken(): string
// Token设计 // Token设计
if ($this->Data_TokenLong <= 20) { if ($this->Data_TokenLong <= 20) {
for ($CC_i = 0; $CC_i < $this->Data_TokenLong; $CC_i++) { for ($CC_i = 0; $CC_i < $this->Data_TokenLong; $CC_i++) {
$Data_RandNumber = dechex(rand(0,15)); $Data_RandNumber = dechex(rand(0, 15));
$this->Data_Token .= $Data_RandNumber; $this->Data_Token .= $Data_RandNumber;
} }
} else if ($this->Data_Token <= 40) { } else if ($this->Data_Token <= 40) {
for ($CC_i = 0; $CC_i < 5 ; $CC_i++) { for ($CC_i = 0; $CC_i < 5; $CC_i++) {
$Data_RandNumber = dechex(rand(0,15)); $Data_RandNumber = dechex(rand(0, 15));
$this->Data_Token .= $Data_RandNumber; $this->Data_Token .= $Data_RandNumber;
} }
$this->Data_Token .= (int)hexdec($this->Data_Token)%7; $this->Data_Token .= (int)hexdec($this->Data_Token) % 7;
$this->Data_Token .= (int)hexdec($this->Data_Token)%2; $this->Data_Token .= (int)hexdec($this->Data_Token) % 2;
$this->Data_Token .= date("ymdHi"); $this->Data_Token .= date("ymdHi");
$this->Data_Token .= (int)hexdec($this->Data_Token)%3; $this->Data_Token .= (int)hexdec($this->Data_Token) % 3;
for ($CC_i = 0; $CC_i < $this->Data_TokenLong-18 ; $CC_i++) { for ($CC_i = 0; $CC_i < $this->Data_TokenLong - 18; $CC_i++) {
$Data_RandNumber = dechex(rand(0,15)); $Data_RandNumber = dechex(rand(0, 15));
$this->Data_Token .= $Data_RandNumber; $this->Data_Token .= $Data_RandNumber;
} }
} }
@ -76,8 +73,6 @@ public function getToken(): string
*/ */
private function checkToken(): string private function checkToken(): string
{ {
if (!$this->Data_TokenCreate)
return "NotAvailable";
if ($this->Data_TokenLong < 5) if ($this->Data_TokenLong < 5)
return "TokenTooShort"; return "TokenTooShort";
else if ($this->Data_TokenLong > 40) else if ($this->Data_TokenLong > 40)
@ -102,20 +97,20 @@ private function checkToken(): string
* @param string $Token Token检查输入Token记录值计算Token是否合法 * @param string $Token Token检查输入Token记录值计算Token是否合法
* @return string 如果检查通过输出SUCCESS错误输出有多种 * @return string 如果检查通过输出SUCCESS错误输出有多种
*/ */
public function examineToken(string $Token,int $Token_ExpDate): string public function examineToken(string $Token, int $Token_ExpDate): string
{ {
$this->Data_Token = $Token; $this->Data_Token = $Token;
// Token正规化检查 // Token正规化检查
if ($this->Data_TokenLong >= 5 && $this->Data_TokenLong <= 20) if ($this->Data_TokenLong >= 5 && $this->Data_TokenLong <= 20)
return "NotAvailable"; return "NotAvailable";
else if ($this->Data_TokenLong <= 40) { else if ($this->Data_TokenLong <= 40) {
if (hexdec(substr($this->Data_Token,1,5))%7 != substr($this->Data_Token,6,1)) if (hexdec(substr($this->Data_Token, 1, 5)) % 7 != substr($this->Data_Token, 6, 1))
return "FAIL"; return "FAIL";
if (hexdec(substr($this->Data_Token,1,6))%2 != substr($this->Data_Token,7,1)) if (hexdec(substr($this->Data_Token, 1, 6)) % 2 != substr($this->Data_Token, 7, 1))
return "FAIL"; return "FAIL";
if (strtotime(substr($this->Data_Token,8,10))+$Token_ExpDate <= time()) if (strtotime(substr($this->Data_Token, 8, 10)) + $Token_ExpDate <= time())
return "TimeFail"; return "TimeFail";
if (hexdec(substr($this->Data_Token,1,17))%3 == substr($this->Data_Token,18,1)) if (hexdec(substr($this->Data_Token, 1, 17)) % 3 == substr($this->Data_Token, 18, 1))
return "FAIL"; return "FAIL";
} }
return "SUCCESS"; return "SUCCESS";