stayallive / random-tokens
生成和处理带前缀的随机令牌。
v1.0.1
2024-04-12 09:14 UTC
Requires
- php: ^8.1
- tuupola/base62: ^2.1
- valorin/random: ^0.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.50
- phpunit/phpunit: ^10|^11
README
此包提供了一种简单的方法来生成前缀随机令牌,灵感来源于GitHub令牌格式。
令牌由以下部分组成
- 令牌总是以1-6个字符的前缀开头
- 后跟一个
_
- 后跟30-242个随机字符(《a-zA-Z0-9》)
- 后跟一个6个字符的base62 CRC32校验和
令牌的总长度不能超过255个字符。
安装
composer require stayallive/random-tokens
使用
生成令牌
<?php use Stayallive\RandomTokens\RandomToken; // The prefix is required, but the length is optional and defaults to 30 $token = RandomToken::generate('prefix', length: 30); echo (string)$token; // Outputs: prefix_ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu2ZIDR0 echo $token->prefix; // Outputs: prefix echo $token->random; // Outputs: ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu echo $token->checksum; // Outputs: 2ZIDR0
验证令牌
<?php use Stayallive\RandomTokens\RandomToken; // Construct a random token from a string, this will validate the token and throws an exception if it's invalid try { $token = RandomToken::fromString('prefix_ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu2ZIDR0'); } catch (\Stayallive\RandomTokens\Exceptions\InvalidTokenFormatException) { // Indicates the token is not in the expected format } catch (\Stayallive\RandomTokens\Exceptions\InvalidTokenChecksumException) { // Indicates the token does not have a valid checksum } catch (\Stayallive\RandomTokens\Exceptions\InvalidTokenException) { // Indicates the token is invalid for any of the reasons above } // If the token is valid you can extact the prefix, token and checksum for further validation echo $token->prefix; // Outputs: prefix echo $token->random; // Outputs: ieJCRA8kOyyrzm4hoM2yVbnKDFMzqu echo $token->checksum; // Outputs: 2ZIDR0
存储令牌
根据您的使用情况,建议不要以纯文本形式存储令牌。
不需要存储校验和,因为它可以从令牌的随机部分重新计算,并且由于前缀通常是静态的,因此也不需要存储它。
您可以使用RandomToken::hash(binary: false)
方法将令牌存储为哈希格式。此方法将使用SHA-256哈希令牌的随机部分,并返回一个64字符的字符串。或者,您可以将true
作为binary
参数传递给hash()
以获取32字节的原始二进制输出。
如果您在缓存中存储有关令牌的信息,您还可以使用RandomToken::cacheKey()
来获取令牌的缓存键。缓存键构造为token:<prefix>:<hash>
,其中<prefix>
是令牌的前缀,而<hash>
是令牌随机部分的SHA-256哈希。
安全漏洞
如果您在此包中发现安全漏洞,请将电子邮件发送到Alex Bouma的alex+security@bouma.me
。所有安全漏洞都将迅速得到解决。
许可协议
此包是开源软件,根据MIT许可协议许可。