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-D4secret:HS256 / HS384 / HS512 的签名密钥,最多 1024 个字符;不传时只解码,verified 为 false。请勿提交生产环境的真实密钥,示例your-256-bit-secretencoding:secret 的编码:utf8(原样作为密钥)/ base64(先 Base64 解码,也接受 Base64URL),示例utf8
返回字段
header(object):头部(JOSE Header),键名不固定,常见 alg 算法、typ 类型、kid 密钥 IDheader.*(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;没有该声明或不是数字时为 nulltimes.notBefore(string|null):nbf 生效时间,ISO 8601 UTC;没有时为 nulltimes.expiresAt(string|null):exp 过期时间,ISO 8601 UTC;没有时为 nullexpired(boolean|null):按服务器当前时间是否已过期(exp ≤ 当前时间);没有 exp 时为 nullexpiresIn(number|null):距离过期的秒数,已过期为负数;没有 exp 时为 nullnotYetValid(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-D4secret:HS256 / HS384 / HS512 的签名密钥,最多 1024 个字符;不传时只解码,verified 为 false。请勿提交生产环境的真实密钥,示例your-256-bit-secretencoding:secret 的编码:utf8(原样作为密钥)/ base64(先 Base64 解码,也接受 Base64URL),示例utf8
返回字段
header(object):头部(JOSE Header),键名不固定,常见 alg 算法、typ 类型、kid 密钥 IDheader.*(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;没有该声明或不是数字时为 nulltimes.notBefore(string|null):nbf 生效时间,ISO 8601 UTC;没有时为 nulltimes.expiresAt(string|null):exp 过期时间,ISO 8601 UTC;没有时为 nullexpired(boolean|null):按服务器当前时间是否已过期(exp ≤ 当前时间);没有 exp 时为 nullexpiresIn(number|null):距离过期的秒数,已过期为负数;没有 exp 时为 nullnotYetValid(boolean|null):是否还没到生效时间(nbf > 当前时间);没有 nbf 时为 null
TOTP 两步验证码(兼容 Google / 微软 Authenticator):根据 Base32 密钥计算当前验证码和剩余秒数;不传密钥时随机生成一个
GET /api/tools/totp
请求参数
secret:Base32 密钥(验证器二维码里的 secret,空格和 - 会被忽略),至少 16 个字符;不传则随机生成新密钥。请勿提交正在使用的真实密钥,建议用 POST,示例JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXPdigits:验证码位数(6~8),示例6period:时间步长(秒,15~300),示例30algorithm:哈希算法 sha1 / sha256 / sha512,绝大多数验证器用 sha1,示例sha1time:按指定的 Unix 时间(秒)计算,用于调试;不传为服务器当前时间,示例59
返回字段
code(string):当前时间步的验证码(位数等于 digits,不足补前导 0)previousCode(string):上一个时间步的验证码(很多服务端允许 ±1 个时间步的时钟误差)nextCode(string):下一个时间步的验证码remaining(number):当前验证码剩余有效秒数(1~period)period(number):时间步长(秒)digits(number):验证码位数algorithm(string):哈希算法:sha1 / sha256 / sha512counter(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,示例JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXPdigits:验证码位数(6~8),示例6period:时间步长(秒,15~300),示例30algorithm:哈希算法 sha1 / sha256 / sha512,绝大多数验证器用 sha1,示例sha1time:按指定的 Unix 时间(秒)计算,用于调试;不传为服务器当前时间,示例59
返回字段
code(string):当前时间步的验证码(位数等于 digits,不足补前导 0)previousCode(string):上一个时间步的验证码(很多服务端允许 ±1 个时间步的时钟误差)nextCode(string):下一个时间步的验证码remaining(number):当前验证码剩余有效秒数(1~period)period(number):时间步长(秒)digits(number):验证码位数algorithm(string):哈希算法:sha1 / sha256 / sha512counter(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-zcharset.uppercase(boolean):是否含大写字母 A-Zcharset.digits(boolean):是否含数字 0-9charset.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):一条建议