使用kdbxweb创建密码库时遇argon2未实现错误求助
解决kdbxweb在Node.js中出现"argon2 not implemented"错误的方案
问题原因
kdbxweb依赖Argon2哈希算法处理KDBX数据库加密,但该库在Node.js环境下未内置Argon2实现,必须手动安装并注册对应算法逻辑才能正常使用。
解决步骤
安装Argon2依赖包
在项目终端执行命令安装官方Argon2 npm包:npm install argon2给kdbxweb注册Argon2实现
导入argon2库后,将其哈希逻辑映射到kdbxweb的CryptoEngine,替换默认未实现的Argon2方法。修正数据库保存逻辑
database.save()会返回数据库的二进制Buffer数据,需要将其写入本地文件,原代码的保存逻辑需要补全。
完整修正代码
import * as fs from 'fs'; import * as kdbx from 'kdbxweb'; import * as argon2 from 'argon2'; // 注册Argon2实现到kdbxweb kdbx.CryptoEngine.setArgon2Impl({ async hash(pass, salt, memory, iterations, length, parallelism, type, version) { return argon2.hash(pass, { salt, memoryCost: memory, timeCost: iterations, hashLength: length, parallelism, type: type === 0 ? argon2.argon2d : type === 1 ? argon2.argon2i : argon2.argon2id, version }); } }); (async() => { try { // 创建KDBX数据库实例 const database = kdbx.Kdbx.create( new kdbx.Credentials(kdbx.ProtectedValue.fromString('test')), 'credentials' ); // 创建ODBC连接专用分组与条目(按需启用) const group = database.createGroup(database.getDefaultGroup(), 'ODBC Connections'); const entry = database.createEntry(group); entry.fields.set('Title', '生产库ODBC连接'); // 对应ODBC连接名 entry.fields.set('UserName', 'prod_db_user'); // 数据库UID entry.fields.set('Password', kdbx.ProtectedValue.fromString('prod_p@ssw0rd')); // 数据库PWD entry.times.update(); entry.pushHistory(); // 保存数据库到本地文件 const dbBuffer = await database.save(); fs.writeFileSync('odbc_credentials.kdbx', dbBuffer); console.log('凭证库创建保存成功'); } catch (e: any) { console.error('操作失败:', e.message); throw e; } })();
额外说明
- 读取数据库时同样需要先执行Argon2注册逻辑,再加载文件内容解析
- 条目名称(Title字段)设为ODBC连接名后,后续可通过遍历条目匹配名称,取出UserName和Password字段填入ODBC连接字符串
内容的提问来源于stack exchange,提问作者Matthew Swaringen
相关产品推荐
相关产品推荐

