# Nonce 与令牌生成器

为 Web 安全场景生成密码学安全的一次性令牌——CSRF 令牌、OAuth/OIDC state 参数、会话 nonce、以及 PKCE code_verifier/code_challenge（S256）。使用 crypto.randomBytes，绝不使用 Math.random。

> 标准页面: https://elysiatools.com/zh/tools/nonce-generator

- **分类:** Security

- **关键词:** nonce, CSRF, OAuth, state, PKCE, 令牌, 会话, 安全

## 概述

本工具为特定 Web 安全场景生成**一次性高熵令牌**。与通用随机字符串生成器不同，每个场景会自动套用正确的规范。

场景：
- **CSRF 令牌**：与用户会话绑定的不透明令牌，随状态变更请求（表单、AJAX）提交，证明请求来自你自己的页面。
- **OAuth/OIDC State**：发送给授权服务器并在重定向回调时校验的不可猜测值，将响应绑定到本次请求，防止登录 CSRF。
- **会话 Nonce**：与会话绑定的单次随机值，防止请求重放。
- **PKCE Verifier + Challenge**：生成 `code_verifier`（客户端保存）并派生 `code_challenge = base64url(SHA256(verifier))`（发送给授权服务器），依据 RFC 7636，确保泄露的授权码无法在没有 verifier 的情况下兑换。PKCE 强制 base64url 编码，verifier 长度 32-96 字节（43-128 base64url 字符）。
- **自定义**：用于任意单次场景的通用不透明高熵令牌；字节长度由用户控制（8-128）。

选项：
- **字节长度**：熵的字节数。所有预设场景锁定为 32（256 位）；仅在自定义时可编辑（8-128）。
- **编码**：base64url（URL 安全，Web 令牌默认）、hex 或 base64。PKCE 场景强制 base64url。
- **添加过期时间戳前缀**：在令牌前加 `base36(过期秒).令牌`，使服务端可无状态地拒绝过期令牌（OWASP 推荐模式）。
- **有效期（秒）**：时间戳前缀使用的有效期。
- **数量**：一次生成 1-50 个令牌。

安全：随机数来自 Node 的 `crypto.randomBytes()`（密码学安全源），绝不使用 `Math.random()`。PKCE challenge 通过 `crypto.createHash()` 使用 SHA-256。本工具仅生成令牌材料，不在服务端存储或校验令牌。

## 输入项

- **场景** (select)
- **字节长度** (number): e.g. 32
- **编码** (select)
- **添加过期时间戳前缀** (checkbox)
- **有效期（秒）** (number): e.g. 300
- **数量** (number): e.g. 1

## 适用场景

- 在开发 Web 应用时，需要生成符合 OWASP 安全规范的防跨站请求伪造（CSRF）令牌。
- 在对接 OAuth 2.0 或 OIDC 授权流程时，需要生成防登录 CSRF 的 State 参数或用于 PKCE 安全机制的验证器与挑战码。
- 需要生成带有无状态过期时间戳前缀的高熵随机令牌，以便服务端在不依赖数据库存储的情况下校验令牌时效性。

## 工作原理

- 选择目标安全场景（如 CSRF、OAuth State、PKCE 或自定义），系统会自动锁定或推荐相应的字节长度与编码格式。
- 根据需要配置是否启用过期时间戳前缀，并设定有效期（TTL）以及需要批量生成的令牌数量。
- 工具在本地通过密码学安全的 `crypto.randomBytes()` 生成指定长度的随机字节，并根据选择的编码（如 base64url）进行转换；若为 PKCE 场景，则会通过 SHA-256 算法自动派生出对应的 code_challenge。

## 使用案例

- 为单页应用（SPA）生成符合 RFC 7636 规范的 PKCE code_verifier 和 code_challenge，以安全地换取 OAuth 访问令牌。
- 批量生成带有 10 分钟过期前缀的 CSRF 令牌，用于保护 Web 表单和 AJAX 状态变更请求。
- 生成高熵的会话 Nonce 或 OAuth State 字符串，防止重放攻击和登录阶段的跨站请求伪造。

## 常见问题

### 这个工具生成的随机数安全吗？

安全。本工具使用密码学安全的 `crypto.randomBytes()` 接口生成随机字节，绝不使用不安全的 `Math.random()`。

### 什么是 PKCE 场景中的 Verifier 和 Challenge？

Verifier 是客户端生成的随机密钥，Challenge 是对该密钥进行 SHA-256 哈希并进行 base64url 编码后的值，用于防止授权码被拦截劫持。

### 为什么要在令牌中添加过期时间戳前缀？

前缀采用 base36 编码的过期秒数，允许服务端在收到令牌时直接解析并判断是否超时，实现无状态的令牌时效校验。

### 为什么 PKCE 场景下无法修改编码和字节长度？

根据 RFC 7636 规范，PKCE 必须使用 base64url 编码，且 verifier 的熵值字节数固定为 32 字节（以满足 43-128 个字符的长度要求）。

### 你们会在服务器端保存我生成的令牌吗？

不会。本工具仅在浏览器本地生成令牌材料，不进行任何服务端存储或校验，确保您的凭证安全。

## 相关工具

- [跟读提示生成器](https://elysiatools.com/zh/tools/audio-read-along-cue-generator): 从旁白音频及其脚本生成句子或单词级时间戳提示,用于卡拉OK式跟读和语言学习。
- [现代唯一 ID 生成器](https://elysiatools.com/zh/tools/uid-generator): 生成现代唯一标识：ULID、NanoID、Snowflake、CUID2。可对比格式、解码 ULID 时间戳，选择适合你系统的 ID 方案。
- [AGEX 安全分享说明页](https://elysiatools.com/zh/tools/agex-secure-share-note): 为 AGEX 包生成面向接收方的分享说明页，解释如何安全解密与验签
- [数字签名生成器](https://elysiatools.com/zh/tools/digital-signature-generator): 用私钥签名消息或用公钥验签——支持 RSA-PSS (SHA-256)、ECDSA (P-256)、Ed25519。纯本地加密（Node crypto.createSign/createVerify），无网络。粘贴 PEM 密钥来签名或验证 base64 签名。本工具只做签名/验签，不生成密钥对。
- [HMAC 生成与验证器](https://elysiatools.com/zh/tools/hmac-generator-verifier): 使用 SHA-1/SHA-2/SHA-3/BLAKE2 对消息+共享密钥计算 HMAC 消息认证签名，或对收到的签名做验证（恒定时间比对），并内置 Stripe / Slack / GitHub 的 webhook 预设
- [JWK 生成与解析器](https://elysiatools.com/zh/tools/jwk-generator): 生成 RSA、EC（P-256/P-384/P-521/secp256k1）与 OKP（Ed25519/Ed448/X25519/X448）的 JSON Web Key，或解析已有 JWK 以查看参数、指纹与元信息
- [数字 OTP 生成器](https://elysiatools.com/zh/tools/otp-generator): 生成密码学安全的一次性数字验证码（短信 / 邮件验证、抽奖码、活动 PIN），可配长度（3-10 位）、批量输出、可选排除混淆数字及过期倒计时。使用 crypto.randomInt，而非 Math.random。
- [PKCE Code Verifier 与 Challenge 生成器](https://elysiatools.com/zh/tools/pkce-code-verifier-generator): 生成、校验与验证 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 合规审计与配对验证。

## 示例

- [Android Java 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-java): Android Java 图像处理示例，包括图像读取保存、缩放和格式转换
- [Android Kotlin 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-kotlin): Android Kotlin 图像处理示例，包括图像读取保存、缩放和格式转换
- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [Web Rust 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-rust): Web Rust 图像处理示例，包括图像读取保存、缩放和格式转换

## 相关内容

- [令牌、会话与 2FA 工作流工具](https://elysiatools.com/zh/hubs/token-session-and-2fa-workflows): 把 PKCE 与 nonce 生成、JWT/JWK 检查、HMAC 验签、OTP 与 TOTP 测试，以及适合认证排障的标识符工具聚合到一个真实登录流程专题里。
- [JSON Schema、Mock 数据与 API 夹具生成工具](https://elysiatools.com/zh/hubs/json-generate): 围绕JSON Schema 生成、Mock 负载构建与 API 夹具准备整理的一组工具。
- [CSS 效果、配色板与设计 Token 生成工具](https://elysiatools.com/zh/hubs/design-generate): 围绕CSS 视觉效果、配色构建与设计 Token 生成整理的一组工具。
- [可打印 PDF 排版与模板生成工具](https://elysiatools.com/zh/hubs/pdf-generate): 围绕可打印 PDF 排版生成与可复用文档模板整理的一组工具。
