# 安全随机生成器

生成密码学安全的随机密钥材料，由熵位预算驱动——请求 N 位熵，输出 hex/base64/base64url。也支持通过 crypto.randomInt（内部拒绝采样，无模偏差）从自定义字母表生成字符串。对任何密钥/口令/令牌，请用本工具替代基于 Math.random 的工具。

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

- **分类:** Security

- **关键词:** 随机, 安全随机, CSPRNG, 密钥, 密钥生成, 熵, hex, base64, 安全

## 概述

本工具生成**密码学安全的密钥材料**。与现有的随机字符串/密码生成器（使用 `Math.random()`，不适合密钥）不同，本工具由熵位驱动、基于 CSPRNG。

**熵位驱动输入。** 你指定目标熵（位数，默认 256，步长 8）——即你想要的安全强度——工具自动算出字节数（`bytes = ceil(bits/8)`）。这是密钥的正确心智模型：JWT HS256 密钥需要 256 位熵，无论用多少字符表示。不要想"要几个字符"，要想"要多少安全"。

**两条输出分支：**

1. **字节编码**（默认——自定义字母表留空）。用 `crypto.randomBytes()` 生成 `ceil(entropyBits/8)` 个随机字节，并以**三种编码并排**呈现——hex、base64、base64url——便于复制消费端期望的格式。每个字节贡献 8 位熵，因此实际熵始终等于请求值。

2. **自定义字母表**（填写自定义字母表）。每字符采样 `crypto.randomInt(字母表大小)`——由 Node 内部拒绝采样，**无模偏差**，无需手写拒绝循环。实际熵为 `长度 × log₂(字母表大小)`，可能*小于*请求值（如 32 符号字母表 × 10 字符 = 50 位，而非 256）；此时工具用红字警告你，因为短的自定义字母表字符串可能远比看起来弱。

**为什么三种编码并排？** 256 位密钥是 64 个 hex 字符、约 44 个 base64 字符或 43 个 base64url 字符。不同系统期望不同格式；并排展示三种让你无需重复运行即可正确选择。

适用场景：AES-256 密钥、HMAC 密钥、JWT 签名密钥、API 密钥、会话密钥、任何攻击者不可猜测的值。`crypto.randomBytes()` 和 `crypto.randomInt()` 取自操作系统 CSPRNG——绝不使用 `Math.random()`。

## 输入项

- **熵（位）** (number): e.g. 256
- **输出编码** (select)
- **自定义字母表（可选）** (text): e.g. abcdefghijklmnopqrstuvwxyz (leave empty for byte encoding)
- **自定义字符串长度** (number): e.g. 32
- **数量** (number): e.g. 1

## 适用场景

- 需要为 AES-256、HMAC 或 JWT 签名生成高熵值的密码学安全密钥时。
- 需要生成无模偏差（Modulo Bias）的自定义字符集 API 密钥或临时令牌时。
- 需要将同一随机密钥快速导出为 hex、base64 或 base64url 等不同编码格式以适配不同系统时。

## 工作原理

- 用户输入所需的目标熵位（例如 256 位），工具会自动计算并申请对应的随机字节数。
- 若未填写自定义字母表，系统调用 crypto.randomBytes() 生成安全字节，并同时以 hex、base64 和 base64url 编码并排展示。
- 若填写了自定义字母表，系统使用 crypto.randomInt() 进行内部拒绝采样以消除模偏差，并根据自定义长度生成字符串。
- 工具会实时计算并显示实际生成的熵值，若实际熵值低于设定的目标熵位，将发出红色警告。

## 使用案例

- 生成用于 JWT (JSON Web Token) 签名的 256 位或 512 位安全密钥。
- 生成用于 Web API 认证的自定义字符集随机 API Key。
- 生成用于加密算法（如 AES-256-GCM）的初始化向量（IV）或对称密钥。

## 常见问题

### 为什么这个工具比 Math.random() 更安全？

Math.random() 是非密码学安全的伪随机数生成器，其输出可被预测；本工具使用操作系统底层的 CSPRNG，输出完全不可预测。

### 什么是熵位驱动？

熵位代表密钥的安全强度。本工具让您直接指定所需的熵（如 256 位），而非单纯指定字符长度，从而确保密钥达到预期的安全级别。

### 为什么自定义字母表时会收到熵值过低的警告？

当自定义字母表的字符集较小或生成的字符串较短时，其组合可能性（实际熵）会低于您设定的目标安全熵，工具会提示您增加长度或扩大字符集。

### 什么是无模偏差（Modulo Bias）？

在限制随机数范围时，简单的取模运算会导致某些字符出现的概率偏高。本工具采用拒绝采样算法，确保每个字符被选中的概率完全均等。

### 为什么默认会并排输出三种编码？

不同的开发框架和传输协议对密钥格式要求不同，并排提供 hex、base64 和 base64url 编码可免去您手动转换的麻烦。

## 相关工具

- [Ed25519 / X25519 密钥生成与签名验证器](https://elysiatools.com/zh/tools/ed25519-x25519-keygen-signature-verifier): 生成 Ed25519 或 X25519 密钥，并支持 Ed25519 消息签名与验证
- [文本哈希生成器](https://elysiatools.com/zh/tools/text-hash-generator): 一次性计算任意文本的 MD5、SHA-1、SHA-256、SHA-512、CRC-32 哈希。同时给出十六进制和 Base64 两种摘要(基于 UTF-8 编码)。
- [数字签名生成器](https://elysiatools.com/zh/tools/digital-signature-generator): 用私钥签名消息或用公钥验签——支持 RSA-PSS (SHA-256)、ECDSA (P-256)、Ed25519。纯本地加密（Node crypto.createSign/createVerify），无网络。粘贴 PEM 密钥来签名或验证 base64 签名。本工具只做签名/验签，不生成密钥对。
- [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 合规审计与配对验证。
- [RSA 加解密](https://elysiatools.com/zh/tools/rsa-encrypt-decrypt): 用 RSA 公钥加密文本，或用匹配的私钥解密密文，使用 OAEP 填充（SHA-1 或 SHA-256）。支持长消息分段。密钥与数据均在本地，不外传。由于 Bleichenbacher 攻击，Node 已禁用 PKCS#1 v1.5 解密，故本工具不提供该选项。
- [CRC32 校验和](https://elysiatools.com/zh/tools/crc32-checksum): 计算任意文本或原始字节的 CRC32 校验和（IEEE 802.3 多项式）。可输出十六进制、十进制或二进制。接受纯文本（UTF-8）或通过 hex/base64 输入的原始字节。
- [Data URI 生成器](https://elysiatools.com/zh/tools/data-uri-generator): 将文件转换为 Data URI（Base64 或百分号编码），用于直接在 HTML、CSS 或 Markdown 中内联图片、字体等资源
- [哈希算法对比器](https://elysiatools.com/zh/tools/hash-algorithm-comparator): 对同一输入同时用 MD5、SHA-1、SHA-256、SHA-512、BLAKE2b、BLAKE3 哈希并横向对比：输出长度、十六进制/Base64 摘要、安全状态（已破解/现代）以及相对速度基准。适合教学、选择哈希算法或核对校验和。

## 示例

- [无版权MP3音频样本](https://elysiatools.com/zh/samples/mp3-samples): 免费使用和测试的无版权音频样本集合，包括自然声音、冥想音乐和环境音频，适用于测试和开发目的
- [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 包括读取、保存、缩放和格式转换

## 相关内容

- [令牌、会话与 2FA 工作流工具](https://elysiatools.com/zh/hubs/token-session-and-2fa-workflows): 把 PKCE 与 nonce 生成、JWT/JWK 检查、HMAC 验签、OTP 与 TOTP 测试，以及适合认证排障的标识符工具聚合到一个真实登录流程专题里。
- [文本大小写、编码与规范化转换工具](https://elysiatools.com/zh/hubs/text-convert): 在一个专题中比较文本大小写转换、全半角转换、编码转换、Quoted-Printable 处理和行内文本规范化工具。
- [Text 工具专题](https://elysiatools.com/zh/hubs/text-utility): 探索 33 个围绕 text 的 utility 工作流工具，快速找到相近能力。
- [文本分析、可读性与内容检查工具](https://elysiatools.com/zh/hubs/text-analyze): 在一个专题中比较文本统计、语言识别、可读性评分、情感分析、内容审核和模式分析工具。
