首页 > 解决方案 > Node.JS crypto.ECDH.computeSecret() 总是抛出错误

问题描述

我创建了一个测试程序来测试 Node.JS 文档中的 ECDH 算法。我修改了代码以与我的远程应用程序一起使用,代码如下所示:

//Source
var crypto = require('crypto');
var fs = require('fs');
var ecdh = crypto.createECDH('secp521r1');
fs.writeFileSync('./key',ecdh.generateKeys().toString('base64'));
//Remote
var crypto = require('crypto');
var fs = require('fs');
var ecdh = crypto.createECDH('secp521r1');
ecdh.generateKeys();
var key = Buffer.from(fs.readFileSync('./key'), 'base64');
var secret = ecdh.computeSecret(key, 'base64');
console.log(secret);

但是,每次我ECDH.computeSecret()从远程脚本运行时,它总是会抛出一个错误。我已经尝试寻找解决方案,但无处可寻。

标签: node.jscryptographydiffie-hellmanecdh

解决方案


我终于发现了一个问题,只是因为我在将密钥保存到磁盘时忘记指定编码。在网络上,应该是一样的。

//source
var crypto = require('crypto');
var fs = require('fs');
var ecdh = crypto.createECDH('secp521r1');
fs.writeFileSync('./key', ecdh.generateKeys().toString('base64'), {encoding: 'utf-8'}); //added encoding
//Remote
var crypto = require('crypto');
var fs = require('fs');
var ecdh = crypto.createECDH('secp521r1');
ecdh.generateKeys();
var key = Buffer.from(fs.readFileSync('./key', {encoding: 'utf-8'}), 'base64');//added encoding
var secret = ecdh.computeSecret(key);
console.log(secret)


推荐阅读