# PKCE Code Verifier 与 Challenge 生成器

生成、校验与验证 OAuth2 / OIDC PKCE（RFC 7636）的 code_verifier 与 S256 code_challenge 配对。三种模式：(1) 从密码学安全随机字节（256/384/512/768 位熵）生成全新的 verifier + challenge；(2) 按 RFC 审计你已有的 verifier——长度（43–128）、字符集 [A-Za-z0-9-._~] 与 ≥256 位熵；(3) 通过重算 BASE64URL(SHA256(verifier)) 验证 verifier/challenge 配对。可选构建完整的授权请求 URL 与令牌交换体。补足通用的 nonce-generator（仅输出 verifier+challenge 配对）——增加 RFC 合规审计与配对验证。

> 标准页面: https://elysiatools.com/zh/tools/pkce-code-verifier-generator

- **分类:** Security

- **关键词:** pkce, oauth2, oidc, rfc 7636, code_verifier, code_challenge, s256, 授权码, spa, 移动端, 公共客户端, sha256, verifier, challenge, oauth 安全

## 概述

面向 OAuth2 / OIDC 开发者的 PKCE（Proof Key for Code Exchange，RFC 7636）专项工具：

1. 选择模式：Generate（生成新配对）、Validate（审计已有 verifier）或 Verify（检查 verifier/challenge 配对是否匹配）。
2. Generate 模式从密码学安全随机字节（可选 32/48/64/96 字节 = 256/384/512/768 位）派生 code_verifier 并 base64url 编码，再计算 code_challenge = BASE64URL(SHA256(verifier))。verifier 留在客户端；只有 challenge 发往授权服务器。
3. Validate 模式按 RFC 7636 审计已有 verifier：长度 43–128 字符、字符集限于 [A-Za-z0-9-._~]、熵 ≥256 位。合规时同时显示该 verifier 推导出的 S256 challenge。
4. Verify 模式重算 BASE64URL(SHA256(verifier)) 并与提供的 code_challenge 比对——在令牌交换阶段排查 "invalid_grant" 或 challenge 不匹配错误时很有用。
5. 可选填写授权端点、Client ID 与重定向 URI，构建完整授权请求 URL（含 code_challenge_method=S256）与稍后发送机密 verifier 的令牌交换体。

离线且密码学可靠：随机字节来自平台 CSPRNG；SHA256 走 crypto 模块。无网络请求，数值不离开浏览器。

## 输入项

- **模式** (select)
- **Verifier 长度（熵字节数）** (select)
- **已有的 code_verifier（用于校验/验证）** (textarea): Paste a code_verifier here (used in Validate and Verify modes)
- **已有的 code_challenge（配对验证模式）** (textarea): Paste the code_challenge to compare against (Verify mode)
- **授权端点（可选，用于 URL 构建器）** (text): https://auth.example.com/oauth2/authorize
- **Client ID（可选，用于 URL 构建器）** (text): my-client-id
- **重定向 URI（可选，用于 URL 构建器）** (text): https://app.example.com/callback

## 适用场景

- 在开发单页应用（SPA）或移动端等公共客户端时，需要为 OAuth2 授权码流程生成安全的 PKCE 凭证。
- 调试 OAuth2 令牌交换阶段的 "invalid_grant" 错误，需要验证客户端生成的 code_verifier 与发送给服务器的 code_challenge 是否匹配。
- 审计第三方库或已有系统生成的 code_verifier 是否符合 RFC 7636 的长度、字符集和熵值要求。

## 工作原理

- 生成模式：使用浏览器本地的密码学安全随机数生成器（CSPRNG）获取指定强度的随机字节，进行 Base64URL 编码生成 code_verifier，再通过 SHA256 哈希和 Base64URL 编码计算出 code_challenge。
- 校验模式：对输入的 code_verifier 进行 RFC 7636 规范审计，检查其长度是否在 43 至 128 字符之间、是否仅包含允许的字符 \[A-Za-z0-9-._~\]，并计算其对应的 S256 Challenge。
- 验证模式：输入已有的 code_verifier 和 code_challenge，系统在本地重新计算 BASE64URL(SHA256(verifier)) 并与输入的 Challenge 进行比对，直接反馈是否匹配。
- URL 构建：可选输入授权端点、Client ID 和重定向 URI，工具将自动拼接包含 code_challenge 和 code_challenge_method=S256 的完整授权请求 URL。

## 使用案例

- 快速生成符合 RFC 7636 标准的 PKCE 凭证，用于配置前端 SPA 或移动端 App 的 OAuth2 登录流程。
- 验证已有客户端日志中记录的 code_verifier 是否能正确推导出对应的 code_challenge，排查授权失败问题。
- 自动拼接包含 PKCE 参数的 OAuth2 授权请求 URL，简化接口测试与调试。

## 常见问题

### 这个工具安全吗？我的密钥会被上传吗？

安全。所有计算均在本地浏览器中通过 Web Crypto API 完成，无网络请求，您的 Verifier 和 Challenge 绝不会被上传或泄露。

### 什么是 PKCE 的 S256 模式？

S256 是指将 code_verifier 经过 SHA256 哈希后，再进行 Base64URL 编码生成 code_challenge 的安全模式，是 RFC 7636 推荐的模式。

### 为什么我的 Code Verifier 校验失败？

请检查其长度是否在 43 到 128 字符之间，且只能包含大小写字母、数字以及 "-"、"."、"_"、"~" 这四个特殊字符。

### 什么是熵字节数，我该如何选择？

熵字节数决定了 Verifier 的随机性强度。RFC 7636 要求至少 256 位（32 字节）熵，推荐选择 64 字节（512 位）以获得更高的安全性。

### 如何使用生成的配对进行 OAuth2 授权？

在发起授权请求时携带 code_challenge 和 code_challenge_method=S256；在后续使用授权码换取 Token 时，在 POST 请求体中携带未加密的 code_verifier。

## 相关工具

- [哈希算法对比器](https://elysiatools.com/zh/tools/hash-algorithm-comparator): 对同一输入同时用 MD5、SHA-1、SHA-256、SHA-512、BLAKE2b、BLAKE3 哈希并横向对比：输出长度、十六进制/Base64 摘要、安全状态（已破解/现代）以及相对速度基准。适合教学、选择哈希算法或核对校验和。
- [BIP39 助记词生成器](https://elysiatools.com/zh/tools/mnemonic-bip39-generator): 生成或验证 12 到 24 词的 BIP39 助记词，并显示 entropy 与 PBKDF2-HMAC-SHA512 seed 输出
- [文本哈希生成器](https://elysiatools.com/zh/tools/text-hash-generator): 一次性计算任意文本的 MD5、SHA-1、SHA-256、SHA-512、CRC-32 哈希。同时给出十六进制和 Base64 两种摘要(基于 UTF-8 编码)。
- [RSA 加解密](https://elysiatools.com/zh/tools/rsa-encrypt-decrypt): 用 RSA 公钥加密文本，或用匹配的私钥解密密文，使用 OAEP 填充（SHA-1 或 SHA-256）。支持长消息分段。密钥与数据均在本地，不外传。由于 Bleichenbacher 攻击，Node 已禁用 PKCS#1 v1.5 解密，故本工具不提供该选项。
- [SSH 密钥对生成器](https://elysiatools.com/zh/tools/ssh-key-generator): 生成 SSH 密钥对（推荐 Ed25519，或 RSA 4096、ECDSA P-256），公钥为可直接用于 ~/.ssh/authorized_keys 的 OpenSSH 格式，附 SHA256 指纹与 PEM 私钥。可选口令加密。本地运行。
- [甲状腺激素指数（TSH/FT4/FT3 联动判读）](https://elysiatools.com/zh/tools/thyroid-index): 联动判读 TSH、FT4 与可选 FT3，判断甲状腺轴状态。成人参考范围：TSH 0.4–4.0 mIU/L、FT4 0.8–1.8 ng/dL（≈10–23 pmol/L）、FT3 2.3–4.2 pg/mL（≈3.5–6.5 pmol/L）。TSH 高 + FT4 低 → 原发性甲减（桥本、消融后、缺碘、胺碘酮/锂）；TSH 高 + FT4 正常 → 亚临床甲减；TSH 低 + FT4 高（±FT3 高）→ 原发性甲亢（Graves、毒性结节、甲状腺炎早期、碘/胺碘酮相关）；TSH 低 + FT4 正常 → 亚临床甲亢或外源性激素或早期甲状腺炎，应查 FT3 识别 T3 毒症；TSH 正常/低 + FT4 低 → 中枢性（继发/三发）甲减（垂体/下丘脑病变）；TSH 高 + FT4 高 → TSH 瘤或甲状腺激素抵抗；全部正常 → 甲状腺功能正常（非甲状腺病态综合征可仅 FT3 低）。注意事项：TSH 昼夜节律（22:00–02:00 峰，午后谷）；多巴胺、激素、重病、卡麦角林可抑制 TSH；孕期应使用孕期特异性 TSH 范围；异嗜性抗体可致假性 TSH/FT4 异常；胺碘酮可致 1 型（碘致）与 2 型（破坏性）甲亢。来源 ATA 2014/2016、NACB 2002、Garber 2012、MDCalc。不构成医疗建议。
- [TOTP / HOTP 离线动态密码生成器](https://elysiatools.com/zh/tools/totp-hotp-offline-generator): 从 base32 共享密钥生成 RFC 6238 TOTP（基于时间，6/8 位、30/60 秒步长）与 RFC 4226 HOTP（基于计数器）一次性密码，完全离线，支持 HMAC-SHA1/256/512，并导出 otpauth:// URI 以便导入 Google Authenticator / Authy
- [AI 域名创意生成器](https://elysiatools.com/zh/tools/ai-domain-name-idea-generator): 输入品牌关键词,让 AI 生成最多 10 个创意域名,自动用 DNS 粗筛 + RDAP 复验可用性,过滤掉已注册的。面向创业者、独立开发者、品牌策划。

## 示例

- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [代码注释示例](https://elysiatools.com/zh/samples/code-comment-samples): 用于测试注释移除的各种注释样式代码示例文件
- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [无效变量名代码示例](https://elysiatools.com/zh/samples/code-invalid-variable-names-samples): 展示不同编程语言中无效变量命名约定的示例代码文件

## 相关内容

- [音频编码与格式转换工具](https://elysiatools.com/zh/hubs/audio-convert): 在一个专题里比较音频格式转换、码率调整、采样率转换、编码切换和导出工具，适合交付与归档工作流。
- [图片格式转换与动画导出工具](https://elysiatools.com/zh/hubs/image-convert): 在一个专题里比较 JPG、PNG、GIF、AVIF、WebP、TIFF、ICO、base64 以及动画导出相关的图片格式转换工具。
- [JSON 交换与格式翻译工具](https://elysiatools.com/zh/hubs/json-convert): 在一个专题里比较 JSON 与 CSV、YAML、TOML、GraphQL、XML、Markdown、Excel、BSON、EDN 等结构化格式之间的转换工具。
- [面向网页与印刷的色彩空间转换工具](https://elysiatools.com/zh/hubs/design-convert): 围绕网页到印刷的色彩空间转换整理的一组工具。
