防 AI 密钥窃取工具 - 将密钥加密存储在二进制文件中,防止 AI 爬虫读取代码库时窃取敏感信息。
- bin 文件存储:密钥加密后存储在二进制文件中,AI 爬虫通常不会读取二进制文件
- AES-256-GCM 加密:使用强加密算法保护密钥
- XOR 编码主密钥:主密钥经过 XOR 编码后存储在 bin 文件头部
- 校验值验证:使用校验值确保 bin 文件完整性
kveil/
├── packages/
│ ├── cli/ # Node.js CLI 工具
│ ├── flutter/ # Flutter 运行时库
│ └── web/ # Web/React 运行时库
cd packages/cli
npm install
npm link # 全局安装 kveil 命令kveil init生成:
.kvbin/secrets.bin- 加密的密钥存储文件.kvbin/config.yaml- 密钥声明配置
kveil add mi_api_key "sk-1234567890abcdef"kveil listkveil checkkveil get mi_api_key# 查看所有密钥的明文和密文
kveil show -l
# 查看指定密钥的明文
kveil show mi_api_key示例输出:
📦 Kveil 密钥信息:
1. mi_api_key:
密文:HPDmK6RYZg01Nc1Y|Wavsketr9KP3T031bsya1A==|xje16ULc29bI1WRJGw==
原文:sk-123qsdawda
共 1 个密钥
在 pubspec.yaml 中:
dependencies:
kveil: ^0.3.0flutter:
assets:
- .kvbin/secrets.bin
- .kvbin/config.yamlimport 'package:kveil/kveil.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化
await Kveil.init();
// 获取密钥
final apiKey = Kveil.get('mi_api_key');
runApp(MyApp());
}// 检查必需的密钥是否都存在
Kveil.checkRequiredKeys(['mi_api_key', 'stripe_key']);npm install path/to/kveil/packages/web将 .kvbin/secrets.bin 文件拷贝到 public/ 目录:
cp .kvbin/secrets.bin public/.kvbin/secrets.binimport { Kveil } from 'kveil-web';
// 初始化
await Kveil.init('/.kvbin/secrets.bin');
// 获取密钥
const apiKey = Kveil.get('mi_api_key');import { useEffect, useState } from 'react';
import { Kveil } from 'kveil-web';
function useApiKey(name: string): string | null {
const [key, setKey] = useState<string | null>(null);
useEffect(() => {
if (Kveil.isInitialized()) {
setKey(Kveil.get(name));
}
}, [name]);
return key;
}
function MyApp() {
const apiKey = useApiKey('mi_api_key');
if (!apiKey) {
return <div>加载中...</div>;
}
return <div>API Key: {apiKey}</div>;
}✅ AI 爬虫:AI 训练爬虫通常只读取文本文件,不会解析二进制文件 ✅ 代码审查:人类审查时看不到明文密钥 ✅ 版本控制:bin 文件中的密钥是加密的
❌ 专业逆向工程:bin 文件可以被分析和逆向 ❌ 运行时攻击:攻击者可以通过 hook 运行时获取明文 ❌ 黑客攻击:这不是一个防黑客工具
- 不要将 bin 文件提交到公共仓库 - 虽然密钥是加密的,但仍可能被分析
- 在 CI/CD 中注入密钥 - 使用环境变量或密钥管理服务
- 定期轮换密钥 - 减少泄露风险
- 限制密钥权限 - 使用最小权限原则
# CLI 测试
cd packages/cli
npm test
# Web 运行时测试
node packages/web/test/web.test.jscd packages/web
npm install
npm run buildMIT