API 密钥与敏感信息检测
把日志、代码或 .env 文件粘贴到 ChatGPT 之前先检查一遍:sk-proj-…(OpenAI)、AKIA…(AWS)、ghp_…(GitHub)、AIza…(Google)、xoxb-…(Slack)、sk_live_…(Stripe)等密钥,以及 JWT、PEM 私钥和 DB_PASSWORD=… 的值都会被标出并替换为 [REDACTED_…]。长度 24 个字符以上、每字符香农熵不低于 4.0 比特的随机字符串也会被标记。文本不会离开你的浏览器。
使用方法
- 粘贴你准备发给 AI 聊天的日志、代码、配置文件或提示词,输入时即开始检查。
- 查看高亮位置和带行号的列表。红色是已知格式的密钥,蓝色是可能是密钥的随机字符串。
- 复制打码后的文本。勾选“保留前 4 个字符”可以看出原来是哪种密钥,例如 ghp_****。
计算方法
已知服务的密钥按固定前缀和长度识别:OpenAI 的 sk- 和 sk-proj-,Anthropic 的 sk-ant-,AWS 访问密钥(AKIA 或 ASIA 后接 16 位大写字母或数字),GitHub 的 ghp_、gho_ 和 github_pat_,Google 的 AIza 后接 35 个字符,Slack 的 xoxb- 和 xoxp-,Stripe 的 sk_live_、pk_live_ 和 rk_,JWT(以 eyJ 开头的三段 base64url)以及 -----BEGIN … PRIVATE KEY----- 块。
也会按名称识别。在 .env 和配置文件中,名称含 SECRET、TOKEN、PASSWORD、API_KEY、ACCESS_KEY 或 PRIVATE_KEY 的变量值、aws_secret_access_key 后的 40 位 AWS 私密访问密钥,以及 postgres://user:password@host 这类连接字符串里的密码都会被打码。changeme、<your-key>、${VAR}、**** 等占位值会被忽略。
没有已知格式的字符串用香农熵打分:H = -Σ p(c) log2 p(c)。长度 24 以上、混合大小写字母和数字、每字符至少 4.0 比特的字符串会被标记。随机生成的 32 位密钥一般在 4.5 到 5 之间。提交哈希、UUID 这类纯十六进制字符串不计入。
两条规则命中同一段文本时,取更具体的一条:OPENAI_API_KEY=… 里的密钥标为 OpenAI 密钥,而不是普通 .env 值。所有处理都在本页完成,文本不会上传、不会保存,也不会写进网址。
可识别的格式
| 服务 | 样子 |
|---|---|
| OpenAI | sk-… , sk-proj-… |
| Anthropic | sk-ant-… |
| AWS | AKIA… (20 个字符) + 40 位私密密钥 |
| GitHub | ghp_… , github_pat_… |
| Google API | AIza… (39 个字符) |
| Slack | xoxb-… , xoxp-… , hooks.slack.com 网址 |
| Stripe | sk_live_… , pk_live_… , rk_… |
| JWT | eyJ….eyJ….… |
| 私钥 | -----BEGIN … PRIVATE KEY----- |
| 连接字符串 | scheme://user:password@host |
| .env 值 | 含 SECRET/TOKEN/PASSWORD 的名称=… |
常见问题
我的文本会被发送到别处吗?
不会。检查和打码都在浏览器里完成。文本不上传、不存入本地存储、也不放进网址,所以不会被误分享。离开页面时输入框会被清空。
我已经把密钥粘贴进 ChatGPT 了怎么办?
立即轮换。即使删除了对话,也应在服务商后台吊销这个密钥并重新生成。根据你的设置,对话可能被留存用于滥用审查或用于训练,泄露过一次的密钥都应视为已泄露。
为什么普通字符串被标成了密钥?
熵检查会标记看起来随机的长字符串,而构建 ID、base64 图片、签名 URL 等无害内容也可能长这样。蓝色标记只是推测。取消勾选“标记随机字符串”后,只显示已知格式的密钥和带名称的值。
它可能漏掉什么?
写在句子里的短密码或自编密码、没有名称且随机性低的秘密、没有固定前缀的服务密钥,以及拆成多行的值都可能被漏掉。发送前请再读一遍结果。检查只能降低风险,不能证明文本完全干净。
示例里的密钥是真的吗?
不是。示例使用 AWS 文档中的示例密钥、jwt.io 公开的示例令牌和自己编的无意义字符串。格式正确,但什么也打不开。