随机API密钥生成器 - 免费安全的32字符密钥
随机API密钥生成器基于浏览器内置的Web Crypto API,在本地生成长度为8到128位的密码学安全随机密钥,可用于接口身份验证、令牌签发等场景。整个生成过程完全在浏览器中完成,密钥内容不会被发送到任何服务器,也不会被保存,保障了密钥生成过程的安全性和私密性。
API密钥生成器
文档
随机 API 密钥生成器是一种工具,可创建由字母和数字组成的随机字符串,供两个计算机程序之间用作类似密码的代码。该工具完全在访问者的 Web 浏览器中运行。用户可以选择长度为 8 到 128 个字符的密钥,默认长度设为 32 个字符。
什么是 API 密钥?
API 密钥是一串字符,程序在发送请求时会同时发送它,以证明自己获准使用某项服务。Web 服务器会在响应请求前检查该密钥。与用户名和密码不同,API 密钥通常标识的是应用程序或脚本,而不是个人。
当没有人能够猜出密钥时,密钥的效果最好。使用真正随机性的生成器可以避免人工输入的密钥中出现的模式,例如重复字符或简短、容易记忆的单词。
此生成器的工作原理
该工具从固定的 62 个字符集合中构建每个密钥:26 个大写字母 A–Z、26 个小写字母 a–z,以及 10 个数字 0–9。对于长度为 n 的密钥,它会从该集合中逐个选取 n 个字符。
每个字符都来自浏览器的 Web Crypto API,具体来说是 crypto.getRandomValues()。这是密码学安全的伪随机数生成器(CSPRNG),不同于 JavaScript 的 Math.random();后者具有可预测性,不适合生成安全敏感值。
要从随机字节(有 256 种可能值)中公平地选出 62 个选项之一,生成器不能简单地使用 byte % 62。由于 256 不能被 62 整除,直接取模会使字符集合开头的几个字符比其余字符略微更容易出现。该工具通过拒绝采样来避免这种偏差:丢弃任何会造成偏差的随机字节,改为重新生成一个。这样,最终密钥中的每个字符在每个位置出现的机会都相等且没有偏差。
如何生成 API 密钥
- 输入长度为 8 到 128 个字符的密钥,或保留默认值 32。超出该范围的数字会被标记,并改用距离最近的允许长度。
- 点击“生成”。密钥会显示在文本框中,整个过程完全在浏览器内完成。点击文本框即可选中整个密钥。
- 点击“复制”将密钥复制到剪贴板。某些浏览器首次操作时会请求权限。
- 点击“重新生成”可生成相同长度的新密钥,或点击“重置”清除密钥并恢复默认长度 32。
该工具会在密钥下方显示三个数值:密钥的字符长度、字符集大小(始终为 62)以及以位为单位的熵。
不会有任何密钥发送到服务器、记录日志或存储。生成过程使用本地 JavaScript 代码,因此在生成期间检查浏览器的网络活动时,不会发现任何发出的请求。
如何计算可能的密钥数量
给定长度能够生成的不同密钥数量遵循一个简单公式:
其中,N 是可能密钥的数量,c 是字符集的大小,n 是密钥长度。
对于此工具,字符集大小始终为 62。默认长度为 32 时:
N = 62³² ≈ 2.27 × 10⁵⁷
这个数量也可以用熵表示,单位为位,公式如下:
其中,H 是以比特计的熵。
对于长度为 32 个字符的密钥:32 × log₂(62)≈ 32 × 5.95 ≈ 190.5 位。
示例:尝试所有密钥需要多长时间
假设攻击者每秒可以测试十亿(10⁹)个密钥,这对任何现实系统而言都快得不切实际。尝试所有可能的长度为 32 个字符的密钥需要:
2.27 × 10⁵⁷ ÷ 10⁹ = 2.27 × 10⁴⁸ 秒 ≈ 7.2 × 10⁴⁰ 年
作为比较,宇宙的年龄约为 1.4 × 10¹⁰ 年。对于这种长度,通过穷举搜索所有可能的密钥并不构成实际威胁。较短的密钥会使这个数量迅速缩小:长度为 8 个字符的密钥只有 62⁸ ≈ 2.18 × 10¹⁴ 个可能值,速度较快的计算机只需几天即可搜索完。
应用程序为何使用 API 密钥
API 密钥为服务提供了一种简单方式,用来判断哪个应用程序正在发出请求。这一点有几个原因。
身份验证。 服务器可以拒绝未携带有效密钥的请求,从而阻止大多数随意滥用。
使用情况跟踪。 由于每个客户端可以持有不同的密钥,服务可以衡量每个客户端的使用量,并按密钥分别设置速率限制。
撤销。 由于每个密钥彼此独立,某个密钥遭到泄露时,可以单独将其停用,而不会影响其他客户端。
API 密钥比 OAuth 2.0 更容易实现。OAuth 是一种以临时、自动续期的令牌为基础的身份验证标准。OAuth 适用于处理用户个人数据的面向公众服务。API 密钥常用于内部工具、脚本以及服务之间的调用,这些场景可以接受长期有效的凭据。
API 密钥的安全实践
以下几种做法可以降低密钥泄露的风险:
- 不要将密钥存储在源代码中。 版本控制历史很难彻底删除,而公共代码仓库会持续被扫描以查找暴露的凭据。应改用环境变量或密钥管理器存储密钥。
- 定期轮换密钥。 每隔几个月更换一次密钥,可以限制泄露的密钥对攻击者保持有效的时间。
- 仅授予密钥所需的最低权限。 只能读取数据的密钥不应同时拥有写入或删除数据的权限。
- 留意异常活动,例如某个密钥发出的请求突然激增。
局限性
该工具不会保留生成过的密钥记录,因此无法保证某个密钥以前从未生成过。两个随机 32 字符密钥匹配的概率约为 1 / (2.5 cm) 2.27 × 10⁵⁷,这个概率对于日常使用来说已经接近于零;但对于数据库主键等需要绝对保证唯一性的系统,应在服务器上将新值与现有值进行比对。
字符集固定由大写字母、小写字母和数字组成。不包含 ! 或 - 等符号,因此密钥可以安全地粘贴到大多数 URL、请求头和配置文件中,无需转义。
常见问题
什么是 API 密钥生成器?
它是一种生成随机字符串的工具,用作软件应用程序之间的身份验证凭据。该工具使用浏览器的密码学安全随机数生成器,创建长度为 8 到 128 个字符的密钥,字符取自 62 个可能字符。
该工具生成的密钥是否足够安全,可用于生产环境?
随机性本身具有密码学安全性。整体安全性还取决于密钥之后的存储和传输方式:绝不要将其提交到源代码管理系统,始终通过 HTTPS 发送,并按固定周期轮换。
应该选择多长的密钥?
默认长度 32 个字符可产生约 2.27 × 10⁵⁷ 种组合,远远超过任何现实中的暴力破解尝试所能搜索的数量。较短的密钥,例如 16 个字符,可能适合低风险的内部工具。过长的密钥增加的保护作用很小,却更难存储和粘贴。
可以设置自定义长度吗?
可以。长度字段接受从 8 到 128 之间的任意整数。字符集本身(A–Z、a–z、0–9)保持不变。
该工具会存储或传输它生成的密钥吗?
不会。每个密钥都由浏览器中的本地 JavaScript 生成。不会有任何内容发送到服务器、记录日志或保存。
API 密钥和 OAuth 令牌有什么区别?
API 密钥是一种长期有效的凭据,除非有人撤销,否则会一直有效。OAuth 令牌会在设定时间后自动过期,并且可以在不需要用户直接参与的情况下刷新。OAuth 适合处理个人数据的公共服务;API 密钥适合更简单的内部或开发用途。
该工具支持哪些浏览器?
任何提供 Web Crypto API 的浏览器都支持,包括过去十年发布的所有版本的 Chrome、Firefox、Safari、Edge 和 Opera。如果缺少该 API,工具会显示错误消息。它绝不会回退到 Math.random(),因为该方法不安全。