@zhengkan2008/secure-keyfile-pkg
v1.2.0
Published
Secure Ethereum private key keyfile encryption/decryption with AES-256-GCM + scrypt.
Maintainers
Readme
@zhengkan2008/secure-keyfile-pkg
使用 AES-256-GCM + scrypt 的以太坊私钥 keyfile 工具包。
安装
npm install @zhengkan2008/secure-keyfile-pkg功能
- 将私钥加密为 JSON keyfile
- 运行时仅在内存中解密
- 支持将加密 keyfile 直接放入
.env(base64/json) scrypt参数合法性与成本上限校验- CLI 隐藏输入(不支持明文命令行参数)
- 保存文件时强制
0600权限
API 示例
import {
encryptPrivateKey,
decryptPrivateKey,
encodeEncryptedKeyfileToBase64,
loadKeyfilePasswordFromEnv,
loadEncryptedKeyfileFromEnv,
loadEncryptedKeyfile,
saveEncryptedKeyfile,
} from '@zhengkan2008/secure-keyfile-pkg';
const keyfile = encryptPrivateKey('0xYOUR_PRIVATE_KEY', 'your-strong-password');
saveEncryptedKeyfile('./keys/arb-bot.keyfile.json', keyfile);
const loaded = loadEncryptedKeyfile('./keys/arb-bot.keyfile.json');
const privateKey = decryptPrivateKey(loaded, 'your-strong-password');
const keyfileB64 = encodeEncryptedKeyfileToBase64(keyfile);
process.env.KEYFILE_JSON_B64 = keyfileB64;
process.env.KEYFILE_PASSWORD_FILE = '/run/bot-secrets/arb-bot.pw';
const fromEnv = loadEncryptedKeyfileFromEnv();
const password = loadKeyfilePasswordFromEnv();
const privateKey2 = decryptPrivateKey(fromEnv, password);.env 方案(推荐)
建议把“加密后的 keyfile”直接放入 .env,不再单独保存 keyfile 文件:
KEYFILE_JSON_B64(推荐):keyfile JSON 的 base64KEYFILE_JSON(兼容):原始 keyfile JSON 字符串KEYFILE_PASSWORD_FILE(推荐):运行期密码文件路径(如/run/bot-secrets/*.pw)KEYFILE_PASSWORD(兼容):明文密码环境变量(仅调试场景)
CLI 示例
npx @zhengkan2008/secure-keyfile-pkg --out ./secure-keyfile.json仅输出 env 变量(不写文件):
npx @zhengkan2008/secure-keyfile-pkg --env-only可选参数:
-o, --out <path>输出路径(默认./keyfile.json)-f, --force覆盖已存在文件--env-only仅输出KEYFILE_JSON_B64-h, --help查看帮助
scrypt 可通过环境变量覆盖:
SCRYPT_N(默认32768,必须是 2 的幂)SCRYPT_R(默认8)SCRYPT_P(默认1)SCRYPT_DKLEN(必须为32)
发布
cd shared/secure-keyfile-pkg
npm install
npm run build
npm run pack:dry-run
npm login --registry https://registry.npmjs.org
npm run publish:npm安全说明
- keyfile 虽已加密,但仍应按敏感文件管理。
- 必须使用强密码,且不要把密码写进命令历史。
- 解密后的私钥应尽量缩短在内存中的存在时间。
