2016-02-20 7 views
2

от: https://nodejs.org/api/crypto.html#crypto_class_ecdhпользовательский закрытый ключ с крипто в Node.js

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"); 

ответ

2

Прежде всего, я считаю, что ваша шестнадцатеричная строка отсутствует ведущий 0, поэтому она должна быть 0e8f32e723decf.

Тогда это зависит от вашей версии Node.js, реализация ECDH.setPrivateKey() изменялось от 5,1 до 5,2


node.js 5,0

  • Вам необходимо сгенерировать ключи и переопределить их
  • Вы должны иметь общественность и Закрытый ключ
  • Working online example

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)); 
+0

Обновлены node.js :-) – jfjobidon

+0

@jfjobidon если это отвечает на ваш вопрос, вы должны принять ответ ;-) – Scolytus