在node.js中使用encryption的自定义私钥

来自: https : //nodejs.org/api/crypto.html#crypto_class_ecdh

const alice_key = alice.generateKeys(); 

会生成一个随机的私钥和相应的公钥。

但我想设置自己的私钥:e8f32e723decf …

如果我使用:

 alice.setPrivateKey("e8f32e723decf"); 

对象alice_key不受影响,所以稍后:

 const bob_secret = bob.computeSecret(alice_key, 'hex', 'hex'); 

将是错误的。 有没有办法做到这样的事情:

 const alice_key = alice.generateKeys("e8f32e723decf"); 

       

网上收集的解决方案 "在node.js中使用encryption的自定义私钥"

首先我想你的hexstring是缺less一个前导0 ,所以它应该是0e8f32e723decf

那么就取决于你的node.js版本, ECDH.setPrivateKey()的实现从5.1改为5.2


node.js 5.0

  • 您需要生成密钥并覆盖它们
  • 你需要有公钥私钥
  • 在线工作的例子
 const crypto = require('crypto'); // this is just to generate a private/public key pair const warmup = crypto.createECDH('secp521r1'); warmup.generateKeys(); const warmup_private_key = warmup.getPrivateKey(); const warmup_public_key = warmup.getPublicKey(); // convert it to hex string to match the example // you would store these strings somewhere I guess private_key = warmup_private_key.toString('hex'); public_key = warmup_public_key.toString('hex'); // now let's create the ciphers const alice = crypto.createECDH('secp521r1'); const bob = crypto.createECDH('secp521r1'); ---------- // Bob gets created keys bob.generateKeys(); // Generate Alice's keys - that's really annoying since you will override it alice.generateKeys(); // now set the keys: alice.setPrivateKey(private_key, "hex"); alice.setPublicKey(public_key, "hex"); // Exchange and generate the secret... const alice_secret = alice.computeSecret(bob.getPublicKey()); const bob_secret = bob.computeSecret(alice.getPublicKey()); console.log("alice's shared secret: " + alice_secret.toString('hex') + "\n"); console.log("bob's shared secret: " + bob_secret.toString('hex') + "\n"); console.log('shared secrets match: ' + alice_secret.equals(bob_secret)); 

node.js> = 5.2

 const crypto = require('crypto'); const alice = crypto.createECDH('secp256k1'); const bob = crypto.createECDH('secp256k1'); bob.generateKeys(); alice.setPrivateKey('0e8f32e723decf', 'hex'); const alice_secret = alice.computeSecret(bob.getPublicKey()); const bob_secret = bob.computeSecret(alice.getPublicKey()); console.log(alice_secret.equals(bob_secret));