code: public static function encrypt($value, $key, $expire = 0, $target = 'url')
      {
          // 随机生成初始化向量, 增加密文随机性
          $iv = static::createIV(self::IV_SIZE);
          // 序列化待加密的数据(支持数组或对象的加密)
          $value = static::packing($value);
          // 加密数据
          $value = openssl_encrypt($value, self::CIPHER_MODE, $key, OPENSSL_RAW_DATA, $iv);
          if ($value === false) {
              return false;
          }
          // 加密有效期
          $expire = $expire ? dechex(time() + $expire) : 0;
          $expire = sprintf('%08s', $expire);
          // 生成密文校验码
          $hmac = static::hmac($iv, $value, $key);
          // 组合加密结果并base64编码
          return Base64::encode(pack('H*', $hmac . $expire) . $iv . $value, $target);
      }
docs: 加密字符串
  
  @param mixed  $value  待加密的数据(数字, 字符串, 数组或对象等)
  @param string $key    加密密钥
  @param int    $expire 加密有效期(几秒后加密失效)
  @param string $target 编码目标
  
  @return string