Hash 密码

Hash 用于密码加密与验证,此服务必须安装 kain/think-extra,需要添加配置 config/hashing.php

  1. return [
  2. // 散列类型
  3. 'driver' => 'argon2id',
  4. // Bcrypt 配置
  5. 'bcrypt' => [
  6. 'rounds' => env('BCRYPT_ROUNDS', 10),
  7. ],
  8. // Argon2i 与Argon2id 配置
  9. 'argon' => [
  10. 'memory' => 1024,
  11. 'threads' => 2,
  12. 'time' => 2,
  13. ],
  14. ];
  • driver bcrypt|argon|argon2id 加密算法
  • bcrypt array bcrypt 的配置
  • argon array argon2i 与 argon2id 的配置

安装后服务将自动注册可通过依赖注入使用

  1. use think\extra\contract\HashInterface;
  2. class Index extends BaseController
  3. {
  4. public function index(HashInterface $hash)
  5. {
  6. $hash->create('123456');
  7. }
  8. }

加密密码

  • create(string $password, array $options = [])
    • password string 密码
    • options array 加密参数
  1. use think\support\facade\Hash;
  2. Hash::create('123456789');

验证密码

  • check(string $password, string $hashPassword): bool
    • password string 密码
    • hashPassword string 散列密码
  1. use think\support\facade\Hash;
  2. $hash = Hash::create('123456789');
  3. // "$argon2id$v=19$m=65536,t=4,p=1$QmlpMEpNY2x3S0FMZ1phVg$XBhTEMcblOge1svlB2/5NNieCDfoT1BvJDinuyBwkKQ"
  4. Hash::check('12345678', $hash);
  5. // false
  6. Hash::check('123456789', $hash);
  7. // true

Cipher 数据加密

Cipher 可以将字符串或数组进行加密解密的服务,此服务必须安装 kain/think-extra,需要添加配置 app_secretapp_idconfig/app.php

  1. return [
  2. 'app_id' => env('app.id', null),
  3. 'app_secret' => env('app.secret', null),
  4. ];
  • app_id string 应用ID
  • app_secret string 应用密钥

安装后服务将自动注册可通过依赖注入使用

  1. use think\extra\contract\CipherInterface;
  2. class Index extends BaseController
  3. {
  4. public function index(CipherInterface $cipher)
  5. {
  6. $cipher->encrypt('123');
  7. }
  8. }

加密数据内容

  • encrypt($context): string
    • context string|array 数据
    • return string 密文
  1. use think\support\facade\Cipher;
  2. Cipher::encrypt('123');
  3. // FLgXf5EXF6eGEqphO3WVJQ==
  4. Cipher::encrypt([
  5. 'name' => 'kain'
  6. ]);
  7. // IyGcnXqDT6ersFhAKdduUQ==

解密数据

  • decrypt(string $ciphertext, bool $auto_conver = true)
    • ciphertext string 密文
    • auto_conver bool 数据属于数组时是否自动转换
    • return string|array 解密内容
  1. use think\support\facade\Cipher;
  2. $result = Cipher::encrypt([
  3. 'name' => 'kain'
  4. ]);
  5. Cipher::decrypt($result);
  6. // array:1 [▼
  7. // "name" => "kain"
  8. // ]

Token 令牌

Token 是 JSON Web Token 方案的功能服务,此服务必须安装 kain/think-extra,首先更新配置 config/token.php

  1. return [
  2. 'system' => [
  3. 'issuer' => 'system',
  4. 'audience' => 'someone',
  5. 'expires' => 3600,
  6. ],
  7. ];

当中 system xsrf 就是 Token 的 Label 标签,可以自行定义名称

  • issuer string 发行者
  • audience string 听众
  • expires int 有效时间

安装后服务将自动注册可通过依赖注入使用

  1. use think\extra\contract\TokenInterface;
  2. class Index extends BaseController
  3. {
  4. public function index(TokenInterface $token)
  5. {
  6. $token->create('system', '12345678', 'a1b2');
  7. }
  8. }

生成令牌

  • create(string $scene, string $jti, string $ack, array $symbol = []): Plain
    • scene string 场景标签
    • jti string Token ID
    • ack string Token 确认码
    • symbol array 标识组
    • return Lcobucci\JWT\Token\Plain
  1. use think\support\facade\Token;
  2. $token = Token::create('system', '12345678', 'a1b2');
  3. dump($token->toString());
  4. // "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcGkua2Fpbm9ubHkuY29tIiwiYXVkIjoiY29uc29sZS5rYWlub25seS5jb20iLCJqdGkiOiIxMjM0NTY3OCIsImFjayI6ImExYjIiLCJzeW1ib2wiOltdLCJleHAiOiIxNjA2MzY3MzQyLjUxMjA2MSJ9.YTIaJU2fBWIssxCu752DAM6yUlWOzJCTJFdsdkT18-0 ◀"

获取令牌对象

  • get(string $jwt): Plain
    • jwt string 字符串令牌
    • return Lcobucci\JWT\Token\Plain
  1. use think\support\facade\Token;
  2. $jwt = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcGkua2Fpbm9ubHkuY29tIiwiYXVkIjoiY29uc29sZS5rYWlub25seS5jb20iLCJqdGkiOiIxMjM0NTY3OCIsImFjayI6ImExYjIiLCJzeW1ib2wiOltdLCJleHAiOiIxNjA2MzY3MzQyLjUxMjA2MSJ9.YTIaJU2fBWIssxCu752DAM6yUlWOzJCTJFdsdkT18-0';
  3. $token = Token::get($jwt);
  4. dump($token);
  5. // Lcobucci\JWT\Token\Plain {#78 ▼
  6. // -headers: Lcobucci\JWT\Token\DataSet {#87 ▼
  7. // -data: array:2 [▶]
  8. // -encoded: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"
  9. // }
  10. // -claims: Lcobucci\JWT\Token\DataSet {#88 ▼
  11. // -data: array:6 [▶]
  12. // -encoded: "eyJpc3MiOiJhcGkua2Fpbm9ubHkuY29tIiwiYXVkIjoiY29uc29sZS5rYWlub25seS5jb20iLCJqdGkiOiIxMjM0NTY3OCIsImFjayI6ImExYjIiLCJzeW1ib2wiOltdLCJleHAiOiIxNjA2MzY3MzQyLjUxMjA2 ▶"
  13. // }
  14. // -signature: Lcobucci\JWT\Token\Signature {#90 ▼
  15. // -hash: b"a2\x1A%Mƒ\x05b,│\x10«´Øâ\x00╬▓RUÄ╠Éô$WlvD§¾Ý"
  16. // -encoded: "YTIaJU2fBWIssxCu752DAM6yUlWOzJCTJFdsdkT18-0"
  17. // }
  18. // }

验证令牌有效性

  • verify(string $scene, string $jwt): stdClass
    • scene string 场景标签
    • jwt string 字符串令牌
    • return stdClass
      • expired bool 是否过期
      • token Lcobucci\JWT\Token\Plain 令牌对象
  1. use think\support\facade\Token;
  2. $jwt = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcGkua2Fpbm9ubHkuY29tIiwiYXVkIjoiY29uc29sZS5rYWlub25seS5jb20iLCJqdGkiOiIxMjM0NTY3OCIsImFjayI6ImExYjIiLCJzeW1ib2wiOltdLCJleHAiOiIxNjA2MzY3MzQyLjUxMjA2MSJ9.YTIaJU2fBWIssxCu752DAM6yUlWOzJCTJFdsdkT18-0';
  3. $result = Token::verify('system', $jwt);
  4. dump($result);
  5. //{#94 ▼
  6. // +"expired": false
  7. // +"token": Lcobucci\JWT\Token\Plain {#89 ▼
  8. // -headers: Lcobucci\JWT\Token\DataSet {#90 ▼
  9. // -data: array:2 [▶]
  10. // -encoded: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"
  11. // }
  12. // -claims: Lcobucci\JWT\Token\DataSet {#91 ▼
  13. // -data: array:6 [▶]
  14. // -encoded: "eyJpc3MiOiJhcGkua2Fpbm9ubHkuY29tIiwiYXVkIjoiY29uc29sZS5rYWlub25seS5jb20iLCJqdGkiOiIxMjM0NTY3OCIsImFjayI6ImExYjIiLCJzeW1ib2wiOltdLCJleHAiOiIxNjA2MzY3MzQyLjUxMjA2 ▶"
  15. // }
  16. // -signature: Lcobucci\JWT\Token\Signature {#93 ▼
  17. // -hash: b"a2\x1A%Mƒ\x05b,│\x10«´Øâ\x00╬▓RUÄ╠Éô$WlvD§¾Ý"
  18. // -encoded: "YTIaJU2fBWIssxCu752DAM6yUlWOzJCTJFdsdkT18-0"
  19. // }
  20. // }
  21. //}

Utils 工具集

Utils 常用工具集合,此服务必须安装 kain/think-extra, 安装后服务将自动注册可通过依赖注入使用

  1. use think\extra\contract\UtilsInterface;
  2. class Index extends BaseController
  3. {
  4. public function index(UtilsInterface $utils)
  5. {
  6. return $utils
  7. ->jump('提交成功', 'index/index')
  8. ->success();
  9. }
  10. }

跳转回调工具

  • jump(string $msg, string $url = ‘’, string $type = ‘html’): Jump
    • msg string 跳转信息
    • url string 回调Url
    • type int 返回类型 htmljson
  1. use think\support\facade\Utils;
  2. class Index extends BaseController
  3. {
  4. public function index()
  5. {
  6. return Utils::jump('提交成功', 'index/index')
  7. ->success();
  8. }
  9. }

Helper 助手

Helper 助手函数扩展,此服务必须安装 kain/think-extra

生成 uuid v4

  • uuid()
    • return UuidInterface
  1. $uuid = uuid();
  2. dump($uuid);
  3. // Uuid {#50 ▼
  4. // #codec: StringCodec {#53 ▼
  5. // -builder: DefaultUuidBuilder {#52 ▼
  6. // -converter: DegradedNumberConverter {#51}
  7. // }
  8. // }
  9. // #fields: array:6 [▼
  10. // "time_low" => "a2bcf1d5"
  11. // "time_mid" => "2be3"
  12. // "time_hi_and_version" => "4dc6"
  13. // "clock_seq_hi_and_reserved" => "8c"
  14. // "clock_seq_low" => "d4"
  15. // "node" => "937835a18a8b"
  16. // ]
  17. // #converter: DegradedNumberConverter {#51}
  18. // }
  19. dump($uuid->toString());
  20. // "a2bcf1d5-2be3-4dc6-8cd4-937835a18a8b"

Stringy字符串操作工具

  • stringy($str = ‘’, $encoding = null)
  1. stringy('abc');