Key pair generator
[Node.js Home][Home]
This generates key pairs for RSA, DSA, EC, ED25519, Ed448, X25519 and X448.
|
Theory
const crypto = require("crypto"); var modulus=1024; var type="rsa"; var message="hello"; var args = process.argv; if (args.length>2) type=args[2]; var keyPair; console.log('\n=== PEM format ==='); if (type=='rsa' || type=='dsa') { keyPair = crypto.generateKeyPairSync('rsa', { modulusLength: modulus, publicKeyEncoding: { format: 'pem', type: 'spki' }, privateKeyEncoding: { format: 'pem', type: 'pkcs8' } }); } else { keyPair = crypto.generateKeyPairSync(type, { namedCurve:'secp256k1', publicKeyEncoding: { format: 'pem', type: 'spki' }, privateKeyEncoding: { format: 'pem', type: 'pkcs8' } }); } console.log('\n=== DER format ==='); console.log("Private key:\n",keyPair.privateKey); console.log("Public key:\n",keyPair.publicKey); if (type=='rsa' || type=='dsa') { keyPair = crypto.generateKeyPairSync('rsa', { modulusLength: modulus, publicKeyEncoding: { format: 'der', type: 'spki' }, privateKeyEncoding: { format: 'der', type: 'pkcs8' } }); } else { keyPair = crypto.generateKeyPairSync(type, { namedCurve:'secp256k1', publicKeyEncoding: { format: 'der', type: 'spki' }, privateKeyEncoding: { format: 'der', type: 'pkcs8' } }); } console.log("Private key:\n",keyPair.privateKey.toString('hex')); console.log("Public key:\n",keyPair.publicKey.toString('hex'));
An sample run for 1,024-bit RSA keys is:
=== PEM format === Private key: -----BEGIN PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAPqs9O+Blm5GpOmu vAV7/Nb7H9FQKZSjo/icB3XiHHnhwCtBcBxR8my6jLBch+ABYIZs/l6ein1q9gVB 2S+S5YCla5o8yUGgCxX4vcXXbrkoyK9n2bOWcKP7dowjZ2IL3QdI/157M1Bud303 PYdOtUqFhH+Ev40ayKpt6MPNNDKrAgMBAAECgYEAn13QBmiLe6Zb99jH3nC6CO70 hn0BQmdaupZvw8kxs2cLZjSfEtIiXm+nPARHuekGNdAbU4pVn3Cd4i+/5Rft4T6u mZWOVsGJf68tmu/REwR8vgQL6JtVgeB/faw0+EAhmmkOpMrbeaN+F+lIoh60OduN /oEQaH2hGMBR7MtRX8ECQQD9q5A8lEabZqE///fC6EVZVJRl7/XkfnkJo3cBA5Ta 0SDWV3iHoLhxC+L22Cr7QXWIza7b4nJiPkrDlrd5jlZhAkEA/PpaOz3IiBjTm/XC i3pM0llU+TzjFmXFO5V92K+IXoiCIHB6YyA75N6bqZNwpJdcVxDwQlXPkgMyrLG1 C9bMiwJBAL1o6FdDhAEvPcIS98YyNu3/yJrg9SL7CJeY1hgMu44zzygcwiPLb00B yiP0vwtDEmbm5eTLjgsrZhnrJO5/yKECQA/XfZ8IF26uX1H86dniJr1larTQ40eb x+YbTm4rT9bbpYpygLeEZTvH1OehnAQylk29ec4toXn7SUkXN8cuBFECQEnMgD0Y 0W6rP3FkXsF2yA7kRtNst4Yjz3m47Z7jfN/wshL7fEMQnMONvj++2T94bZcPJD+b TFmd0QND4MMQXsQ= -----END PRIVATE KEY----- Public key: -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6rPTvgZZuRqTprrwFe/zW+x/R UCmUo6P4nAd14hx54cArQXAcUfJsuoywXIfgAWCGbP5enop9avYFQdkvkuWApWua PMlBoAsV+L3F1265KMivZ9mzlnCj+3aMI2diC90HSP9eezNQbnd9Nz2HTrVKhYR/ hL+NGsiqbejDzTQyqwIDAQAB -----END PUBLIC KEY----- === DER format === Private key: 30820277020100300d06092a864886f70d0101010500048202613082025d02010002818100ebb59db614ea1b0030e0e406597410205245e572340d0283f0481251f9db734a3abaa2b6ca19365aaf2a2630ee1f650da3257958fbef3ed240051240853c7316a417f1d33be16b4972325ae3e45249943d1e3c3e1c2dab0d39d4a9c49deea053faa0660e061f9a7136d1b919b7b833b123e55969ae2b2ea64f4032975a65bf1f020301000102818100db5b1340664a4f8267fa827a9e38f2e1016fe6cdd73edc3e6918c963dcc0ab9442ff7979deae83f4f4daa6dc165ec52e61cbf81825ad4aab63c4d46d9310e4903e36dcea2c986b5fd65d2e38ddde33f1732cbcd3807badb7529a8837fbf664f6bc2a4acd1b6268ffe0249ba16187469a3f455190ab6e16a4440b5c304f9f6131024100f94c256b1894179f0ead2a451b0610fdfc57aeb9bc6a0f6dc747173d5b5b9e0ff81cd2b2de4e110667e94d4ef26ccf2396c70537fe747dc3293afa830bc07b83024100f20bf26a075eb89420754bcb4970ae377216027f75262dd4c96c579c81af5664cfe168a99cdc70a6bbeab26f3cb31c377f19d7b0c9c499d3433c65b093da8f35024100f10812558d9a018ca3a00172774252437f2b37a014ef66a3793cded74ff130cdb7d206553262c04b3544789e8ffd6bf8b8db0bccab94edd33795f287a9611d09024050f8b62bca3361c40be7b1675c3619d1ea947a5971334879bab847c6cf8b7c775523af03aeb9ffe5874fc8497620e4fb9bc565667ad90e2ca27d7df7483f0151024009ca9b9dba90c6784cbdbd2aa0f08fda45f5064f6b91081d9faa10a5fe9e65fd53ad32d468429820a18705cdb7e554542eecfc43163c3fc41ce39c749804d4fa Public key: 30819f300d06092a864886f70d010101050003818d0030818902818100ebb59db614ea1b0030e0e406597410205245e572340d0283f0481251f9db734a3abaa2b6ca19365aaf2a2630ee1f650da3257958fbef3ed240051240853c7316a417f1d33be16b4972325ae3e45249943d1e3c3e1c2dab0d39d4a9c49deea053faa0660e061f9a7136d1b919b7b833b123e55969ae2b2ea64f4032975a65bf1f0203010001