Сгенерируйте пару ключей в "node-forge", используя "exponent", "modulus" и "maxdigits" - PullRequest
1 голос
/ 24 октября 2019

Я использую "node-forge" для генерации publicKey для использования с моим симметричным ключом AES, но я не знаю, как использовать данные, предоставленные моим бэкэндом, для создания этого publicKey. В настоящее время я получаю от API аутентификации следующим образом:

е: "10001" п: "c7c5dd235568711a943ebbdacac890ca2cf12c1ab539f77726e8874d2ab4220cf06369358b5eff0425fb17d4f696f741cf04c5ea874415e7f67d118a2e763e641e8675b8f42e9277b3f70f14e4de23fe16f51abdc427490f47e4b28ae3e5eb3563ba797fe90f9b70ba878646b1b297c52ba735827682b67309d38b423e31b50b" maxdigits: "131"

Где "е" мойэкспонента, «n» - это мой модуль, а «maxdigits» - это длина, которую должны иметь мои BigIntegers.

Но когда я пытаюсь что-то вроде этого:

const keys = forge.pki.rsa.generateKeyPair({ e: res.e, n: res.n });

Мой бэкэнд возвращает ошибку,Что я делаю не так?

1 Ответ

0 голосов
/ 26 октября 2019

forge.pki.rsa.generateKeyPair - неправильный метод в этом контексте. forge.pki.rsa.generateKeyPair создает новую пару ключей с случайным модулем. Первый параметр указывает модуль / размер ключа в битах, второй - показатель степени ( [1] и [2] ):

// var forge = require('node-forge'); // in nodejs-context
var pki = forge.pki;
var rsa = forge.pki.rsa;

var keypair = rsa.generateKeyPair({bits: 2048, e: 0x10001});
var pubKeyPEM = pki.publicKeyToPem(keypair.publicKey);
var privKeyPEM = pki.privateKeyToPem(keypair.privateKey);
console.log(pubKeyPEM);
console.log(privKeyPEM);

forge.pki.rsa.setPublicKey -метод используется для генерации открытого ключа через модуль и экспоненту , где модуль является первым параметром, а показатель степени - вторым параметром ( [2] ), оба типаforge.jsbn.BigInteger ( [3] ):

var BigInteger = forge.jsbn.BigInteger;
var n = new BigInteger('c7c5dd235568711a943ebbdacac890ca2cf12c1ab539f77726e8874d2ab4220cf06369358b5eff0425fb17d4f696f741cf04c5ea874415e7f67d118a2e763e641e8675b8f42e9277b3f70f14e4de23fe16f51abdc427490f47e4b28ae3e5eb3563ba797fe90f9b70ba878646b1b297c52ba735827682b67309d38b423e31b50b', 16);
var e = new BigInteger('10001', 16);
var pubKey = rsa.setPublicKey(n, e);

var pubKeyPEM = pki.publicKeyToPem(pubKey)
console.log(pubKeyPEM); // Check with e.g. https://lapo.it/asn1js/
...