上传文件
  1. base64hub
  2. 密钥与哈希
  3. Base64 密钥生成器

Base64 密钥生成器

点击一个预设,即可得到你的框架所要求格式的密钥:Base64 编码的 32 个随机字节、Laravel APP_KEY、AES 密钥、HMAC 或 JWT 密钥。每个密钥都由浏览器的安全随机数生成器在本地生成。

免费 无需注册,不限次数 本地 不上传任何内容 预设 Laravel、AES、HMAC、JWT、Django、Rails 更新于 2026年10月27日

熵 –长度 –

使用浏览器的密码学安全随机数生成器 crypto.getRandomValues 生成。不存储、不发送任何内容。

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何生成密钥

  1. 点击与你要配置的内容相符的预设。页面打开时默认选中 32 字节。
  2. 从 随机值 中复制密钥。带配置行的预设,例如 Laravel 或 Auth.js,还会在 可直接粘贴 下显示完整的一行。
  3. 点击 重新生成 获取另一个密钥,或者调大 数量 一次生成多个,例如每个环境一个。

预设会替你设置字节数和格式。修改其中任意一项,工具就会切换回 自定义,并保留你填写的值。

各预设及密钥的用途

预设生成内容长度常见用途
16 / 32 / 64 字节Base64 编码的随机字节24 / 44 / 88通用密钥、盐值、secret
Laravel APP_KEYbase64: + 32 字节51.env 中的 APP_KEY
AES-128 密钥16 字节,Base6424AES-128-GCM 或 -CBC
AES-256 密钥32 字节,Base6444AES-256-GCM 或 -CBC
HMAC 密钥32 字节,Base6444HMAC-SHA256 签名、webhook
JWT HS256 密钥32 字节,Base64URL43HS256 令牌的 JWT_SECRET
Auth.js 密钥32 字节,Base6444AUTH_SECRET(原 NEXTAUTH_SECRET)
Django SECRET_KEY取自 Django 字母表的 50 个字符50settings 中的 SECRET_KEY
Rails secret_key_base64 字节,hex128secret_key_base
API 令牌32 字节,Base64URL43Bearer 令牌、邀请链接
UUID v4(Base64URL)短格式的随机 UUID22紧凑的 ID;同时也会显示标准格式的 UUID

CSP nonce 预设用于另一类场景,它有单独的页面:CSP nonce 生成器。

各个长度取决于对应的算法。AES 密钥必须恰好是 16、24 或 32 字节,其他长度都会被拒绝。RFC 7518 要求 HS256 密钥至少 256 位,所以 JWT 预设使用 32 字节。HMAC 密钥短于哈希输出会削弱 HMAC,所以 32 字节适合 HMAC-SHA256,64 字节预设适合 HMAC-SHA512。Django 预设用拒绝采样抽取 50 个字符,字母表中每个字符出现的概率相同,这与 Django 自带的 get_random_secret_key() 行为一致。

Base64 密钥是文本,真正的密钥是字节

你复制的值是随机字节的 Base64 表示。使用它的代码必须先解码:

import base64, os

key = base64.b64decode(os.environ["AES_KEY"])
assert len(key) == 32

在 Node.js 中对应的写法是 Buffer.from(process.env.AES_KEY, "base64")。如果把 44 个字符的字符串直接交给 AES 库,它要么拒绝(Python 中报 AESGCM key must be 128, 192, or 256 bits,Node.js 中报 Invalid key length),要么在宽松的库里不声不响地用了错误的字节。自己读取密钥的框架,例如带 base64: 前缀的 Laravel,会替你完成解码。

Base64URL 和标准 Base64 解码后是相同的字节,但解析器对接受哪一种往往很严格。除非你确定使用方也接受另一种,否则请保持预设生成的格式。

Fernet 密钥及其他格式

Python 的 cryptography 包要求 Fernet 密钥是 32 字节、带填充的 URL 安全 Base64,共 44 个字符。JWT 和 API 令牌预设生成的是不带 = 的 URL 安全形式,所以要在末尾补一个,或者直接在 Python 中生成:

from cryptography.fernet import Fernet

print(Fernet.generate_key().decode())

其他情况请从字节数入手:选择 自定义,填入你所用库文档中要求的字节数,再选择 Base64、Base64URL 或 hex。随机 Base64 生成器 讲解了输出长度;用 HMAC Base64 或 AES 加密 可以马上试用新生成的密钥。

生成之后如何保管密钥

在这里生成的密钥在你复制之前只存在于当前标签页中。复制之后,它的安全程度就取决于你把它粘贴到哪里。生产环境的密钥请存放在平台的密钥存储或密钥管理服务中,每个环境使用不同的密钥,并且绝不要提交到仓库;进入过 Git 仓库的密钥应视为已公开,必须更换。轮换加密密钥意味着要重新加密旧数据,或者保留旧密钥用于解密,所以在线上系统中更换 APP_KEY 之前要先规划好。

常见问题

怎么生成一个 32 字节的 Base64 密钥?

页面打开时默认选中 32 字节 预设,所以输出中的密钥就是:44 个字符,以 = 结尾。在终端里,openssl rand -base64 32 效果相同。

44 个字符的 Base64 字符串能直接当 AES-256 密钥用吗?

不能。AES-256 需要 32 个原始字节,而这 44 个字符是它们的 Base64 文本。请先解码字符串;直接传入文本会报错,例如 Node.js 中的 “Invalid key length”。

不用 artisan,怎么生成 Laravel APP_KEY?

选择 Laravel APP_KEY 预设,把 APP_KEY=base64:… 这一行复制到 .env。它与 php artisan key:generate 写入的格式相同:base64: 前缀加上 32 个随机字节,用于默认的 AES-256-CBC 加密。

怎么在这里生成 Fernet 密钥?

没有 Fernet 预设。选择 32 字节,把 格式 设为 Base64URL,再在 43 个字符后面补一个 =,因为 Fernet 要求 44 个字符、带填充的 URL 安全 Base64。也可以在 Python 中运行 Fernet.generate_key()。

在浏览器里生成生产环境的密钥安全吗?

密钥来自密码学安全的随机数生成器 crypto.getRandomValues,页面也无法把它发送到任何地方。更大的风险在于之后怎么处理:把密钥放进密钥管理服务或受保护的环境变量,绝不要提交到代码仓库。