使用 "exponent"、"modulus" 和 "maxdigits" 在 "node-forge" 中生成密钥对
Generate a key pair in "node-forge" using "exponent", "modulus" and "maxdigits"
我正在使用 "node-forge" 生成公钥以用于我的 AES 对称密钥,但我不知道如何使用后端提供的数据来创建此公钥。目前,我从身份验证 api 收到以下内容:
e: "10001"
n:"c7c5dd235568711a943ebbdacac890ca2cf12c1ab539f77726e8874d2ab4220cf06369358b5eff0425fb17d4f696f741cf04c5ea874415e7f67d118a2e763e641e8675b8f42e9277b3f70f14e4de23fe16f51abdc427490f47e4b28ae3e5eb3563ba797fe90f9b70ba878646b1b297c52ba735827682b67309d38b423e31b50b"
maxdigits: "131"
其中 "e" 是我的指数,"n" 是我的模块,"maxdigits" 是我的 BigIntegers 应该具有的长度。
但是当我尝试这样的事情时:
const keys = forge.pki.rsa.generateKeyPair({ e: res.e, n: res.n });
我的后端 returns 一个错误。我做错了什么?
forge.pki.rsa.generateKeyPair
在这种情况下是错误的方法。 forge.pki.rsa.generateKeyPair
使用 random 模数创建 new 密钥对。第一个参数以位为单位指定 modulus/key 大小,第二个参数指定指数 ([1] and [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
-方法用于通过模数和指数生成public密钥,其中模数是第一个参数,指数是第二个参数([2]), both of type 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/
我正在使用 "node-forge" 生成公钥以用于我的 AES 对称密钥,但我不知道如何使用后端提供的数据来创建此公钥。目前,我从身份验证 api 收到以下内容:
e: "10001" n:"c7c5dd235568711a943ebbdacac890ca2cf12c1ab539f77726e8874d2ab4220cf06369358b5eff0425fb17d4f696f741cf04c5ea874415e7f67d118a2e763e641e8675b8f42e9277b3f70f14e4de23fe16f51abdc427490f47e4b28ae3e5eb3563ba797fe90f9b70ba878646b1b297c52ba735827682b67309d38b423e31b50b" maxdigits: "131"
其中 "e" 是我的指数,"n" 是我的模块,"maxdigits" 是我的 BigIntegers 应该具有的长度。
但是当我尝试这样的事情时:
const keys = forge.pki.rsa.generateKeyPair({ e: res.e, n: res.n });
我的后端 returns 一个错误。我做错了什么?
forge.pki.rsa.generateKeyPair
在这种情况下是错误的方法。 forge.pki.rsa.generateKeyPair
使用 random 模数创建 new 密钥对。第一个参数以位为单位指定 modulus/key 大小,第二个参数指定指数 ([1] and [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
-方法用于通过模数和指数生成public密钥,其中模数是第一个参数,指数是第二个参数([2]), both of type 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/