JWT / TOTP / 密码强度 API

JWT 解码与 HS 签名验证、TOTP 两步验证码、密码强度检测

数据来源:本地计算

返回统一的 JSON 格式 { code, message, cached, stale, updatedAt, data },支持跨域,免注册每天可免费调用 100 次,注册后每天 10000 次。

JWT 解码,提供 secret 时验证 HS256 / HS384 / HS512 签名

GET /api/tools/jwt

请求参数

  • token(必填):JWT 令牌,可带 Bearer 前缀,最多 8192 个字符。令牌和密钥比较敏感,建议用 POST,示例 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuW8oOS4iSIsImFkbWluIjp0cnVlLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6NDEwMjQ0NDgwMH0.iJyHvfJ6hUkw-kxiLuzYCSLZk4Ez-iMzDDxJexjV-D4
  • secret:HS256 / HS384 / HS512 的签名密钥,最多 1024 个字符;不传时只解码,verified 为 false。请勿提交生产环境的真实密钥,示例 your-256-bit-secret
  • encoding:secret 的编码:utf8(原样作为密钥)/ base64(先 Base64 解码,也接受 Base64URL),示例 utf8

返回字段

  • header(object):头部(JOSE Header),键名不固定,常见 alg 算法、typ 类型、kid 密钥 ID
  • header.*(string|number|boolean|object|array|null):头部中的一个字段,原样返回
  • payload(object):载荷(声明),键名不固定;JWT 载荷只是 Base64URL 编码,并未加密
  • payload.*(string|number|boolean|object|array|null):载荷中的一个声明,原样返回,如 sub 主体、iat 签发时间、exp 过期时间(Unix 秒)
  • algorithm(string):头部 alg 字段的值;没有或不是字符串时为空字符串
  • signature(string):签名段原文(Base64URL)
  • verified(boolean):签名是否已验证且正确。只有提供了 secret 且签名匹配时为 true;没提供 secret、算法不支持、算法为 none、签名不匹配时都为 false,此时内容不可信
  • verification(string):验证结果:valid 签名正确;invalid 签名不匹配;skipped 未提供 secret,只解码;unsupported 算法不是 HS256/384/512(如 RS256、ES256),无法验证;none 算法为 none(无签名)
  • verifyMessage(string):验证结果的中文说明
  • times(object):载荷中时间声明换算成的时间
  • times.issuedAt(string|null):iat 签发时间,ISO 8601 UTC;没有该声明或不是数字时为 null
  • times.notBefore(string|null):nbf 生效时间,ISO 8601 UTC;没有时为 null
  • times.expiresAt(string|null):exp 过期时间,ISO 8601 UTC;没有时为 null
  • expired(boolean|null):按服务器当前时间是否已过期(exp ≤ 当前时间);没有 exp 时为 null
  • expiresIn(number|null):距离过期的秒数,已过期为负数;没有 exp 时为 null
  • notYetValid(boolean|null):是否还没到生效时间(nbf > 当前时间);没有 nbf 时为 null

JWT 解码,提供 secret 时验证 HS256 / HS384 / HS512 签名(POST JSON 请求体,参数不进网址)

POST /api/tools/jwt

请求参数

  • token(必填):JWT 令牌,可带 Bearer 前缀,最多 8192 个字符。令牌和密钥比较敏感,建议用 POST,示例 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuW8oOS4iSIsImFkbWluIjp0cnVlLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6NDEwMjQ0NDgwMH0.iJyHvfJ6hUkw-kxiLuzYCSLZk4Ez-iMzDDxJexjV-D4
  • secret:HS256 / HS384 / HS512 的签名密钥,最多 1024 个字符;不传时只解码,verified 为 false。请勿提交生产环境的真实密钥,示例 your-256-bit-secret
  • encoding:secret 的编码:utf8(原样作为密钥)/ base64(先 Base64 解码,也接受 Base64URL),示例 utf8

返回字段

  • header(object):头部(JOSE Header),键名不固定,常见 alg 算法、typ 类型、kid 密钥 ID
  • header.*(string|number|boolean|object|array|null):头部中的一个字段,原样返回
  • payload(object):载荷(声明),键名不固定;JWT 载荷只是 Base64URL 编码,并未加密
  • payload.*(string|number|boolean|object|array|null):载荷中的一个声明,原样返回,如 sub 主体、iat 签发时间、exp 过期时间(Unix 秒)
  • algorithm(string):头部 alg 字段的值;没有或不是字符串时为空字符串
  • signature(string):签名段原文(Base64URL)
  • verified(boolean):签名是否已验证且正确。只有提供了 secret 且签名匹配时为 true;没提供 secret、算法不支持、算法为 none、签名不匹配时都为 false,此时内容不可信
  • verification(string):验证结果:valid 签名正确;invalid 签名不匹配;skipped 未提供 secret,只解码;unsupported 算法不是 HS256/384/512(如 RS256、ES256),无法验证;none 算法为 none(无签名)
  • verifyMessage(string):验证结果的中文说明
  • times(object):载荷中时间声明换算成的时间
  • times.issuedAt(string|null):iat 签发时间,ISO 8601 UTC;没有该声明或不是数字时为 null
  • times.notBefore(string|null):nbf 生效时间,ISO 8601 UTC;没有时为 null
  • times.expiresAt(string|null):exp 过期时间,ISO 8601 UTC;没有时为 null
  • expired(boolean|null):按服务器当前时间是否已过期(exp ≤ 当前时间);没有 exp 时为 null
  • expiresIn(number|null):距离过期的秒数,已过期为负数;没有 exp 时为 null
  • notYetValid(boolean|null):是否还没到生效时间(nbf > 当前时间);没有 nbf 时为 null

TOTP 两步验证码(兼容 Google / 微软 Authenticator):根据 Base32 密钥计算当前验证码和剩余秒数;不传密钥时随机生成一个

GET /api/tools/totp

请求参数

  • secret:Base32 密钥(验证器二维码里的 secret,空格和 - 会被忽略),至少 16 个字符;不传则随机生成新密钥。请勿提交正在使用的真实密钥,建议用 POST,示例 JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP
  • digits:验证码位数(6~8),示例 6
  • period:时间步长(秒,15~300),示例 30
  • algorithm:哈希算法 sha1 / sha256 / sha512,绝大多数验证器用 sha1,示例 sha1
  • time:按指定的 Unix 时间(秒)计算,用于调试;不传为服务器当前时间,示例 59

返回字段

  • code(string):当前时间步的验证码(位数等于 digits,不足补前导 0)
  • previousCode(string):上一个时间步的验证码(很多服务端允许 ±1 个时间步的时钟误差)
  • nextCode(string):下一个时间步的验证码
  • remaining(number):当前验证码剩余有效秒数(1~period)
  • period(number):时间步长(秒)
  • digits(number):验证码位数
  • algorithm(string):哈希算法:sha1 / sha256 / sha512
  • counter(number):时间步计数,即 floor(Unix 秒 / period)
  • generated(boolean):密钥是否由本接口随机生成(没传 secret 时为 true)
  • secret(string):仅 generated 为 true 时返回:随机生成的 Base32 密钥(20 字节,32 个字符)
  • otpauthUrl(string):仅 generated 为 true 时返回:otpauth:// 格式的密钥 URI,可用二维码接口生成二维码后用验证器扫描添加

TOTP 两步验证码(兼容 Google / 微软 Authenticator):根据 Base32 密钥计算当前验证码和剩余秒数;不传密钥时随机生成一个(POST JSON 请求体,参数不进网址)

POST /api/tools/totp

请求参数

  • secret:Base32 密钥(验证器二维码里的 secret,空格和 - 会被忽略),至少 16 个字符;不传则随机生成新密钥。请勿提交正在使用的真实密钥,建议用 POST,示例 JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP
  • digits:验证码位数(6~8),示例 6
  • period:时间步长(秒,15~300),示例 30
  • algorithm:哈希算法 sha1 / sha256 / sha512,绝大多数验证器用 sha1,示例 sha1
  • time:按指定的 Unix 时间(秒)计算,用于调试;不传为服务器当前时间,示例 59

返回字段

  • code(string):当前时间步的验证码(位数等于 digits,不足补前导 0)
  • previousCode(string):上一个时间步的验证码(很多服务端允许 ±1 个时间步的时钟误差)
  • nextCode(string):下一个时间步的验证码
  • remaining(number):当前验证码剩余有效秒数(1~period)
  • period(number):时间步长(秒)
  • digits(number):验证码位数
  • algorithm(string):哈希算法:sha1 / sha256 / sha512
  • counter(number):时间步计数,即 floor(Unix 秒 / period)
  • generated(boolean):密钥是否由本接口随机生成(没传 secret 时为 true)
  • secret(string):仅 generated 为 true 时返回:随机生成的 Base32 密钥(20 字节,32 个字符)
  • otpauthUrl(string):仅 generated 为 true 时返回:otpauth:// 格式的密钥 URI,可用二维码接口生成二维码后用验证器扫描添加

密码强度检测:信息熵、常见弱密码、键盘顺序、重复字符、年份等模式,估算破解时间(只支持 POST,密码不进网址)

POST /api/tools/password-strength

请求参数

  • password(必填):要检测的密码,最多 128 个字符。请勿提交正在使用的真实密码,示例 Tr0ub4dor&3

返回字段

  • score(number):强度评分 0~4:0 非常弱、1 弱、2 一般、3 强、4 非常强(按有效信息熵 <28、<36、<60、<80、≥80 比特划分)
  • level(string):强度等级:非常弱 / 弱 / 一般 / 强 / 非常强
  • summary(string):对该等级的一句话说明
  • entropyBits(number):有效信息熵(比特,保留 1 位小数),已扣除重复、顺序、键盘相邻、常见单词、年份等可预测片段
  • length(number):密码长度(按 Unicode 字符计)
  • charset(object):包含的字符类型
  • charset.lowercase(boolean):是否含小写字母 a-z
  • charset.uppercase(boolean):是否含大写字母 A-Z
  • charset.digits(boolean):是否含数字 0-9
  • charset.symbols(boolean):是否含 ASCII 符号或空格
  • charset.other(boolean):是否含非 ASCII 字符(如中文、emoji)
  • charset.poolSize(number):按包含的字符类型估算的字符集大小(小写 26、大写 26、数字 10、符号 33、其他 100 相加)
  • isCommon(boolean):是否在内置的常见弱密码表中(不区分大小写)
  • crackTime(object):估算的平均破解时间(中文描述)
  • crackTime.online(string):在线猜测(每秒 100 次)所需时间,如 约 3 天
  • crackTime.offline(string):离线暴力破解(每秒 100 亿次)所需时间
  • issues(array):发现的问题,可能为空数组
  • issues[](string):一条问题说明
  • suggestions(array):改进建议,可能为空数组
  • suggestions[](string):一条建议