📅  最后修改于: 2023-12-03 14:44:38.155000             🧑  作者: Mango
Node.js 中的 crypto
模块提供了很多加密相关的功能和 API。其中之一就是 generateKeyPair()
方法,它可以用于生成公钥和私钥的密钥对。
generateKeyPair()
方法提供了以下四个参数:
crypto.generateKeyPair(type[, options][, callback])
crypto.generateKeyPairSync(type[, options])
其中,type
表示要使用的加密算法类型,目前支持的值包括 "rsa"
, "dsa"
, "ec"
, 和 "ed25519"
。options
是一个对象,用于指定选项,具体选项可能与不同的算法相关。callback
是一个回调函数,用于异步获取生成的密钥对。
以下是一个使用 generateKeyPair()
方法生成 RSA 密钥对的示例代码。
const crypto = require('crypto');
const options = {
modulusLength: 4096,
publicKeyEncoding: {
type: 'pkcs1',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs1',
format: 'pem'
}
};
crypto.generateKeyPair('rsa', options, (err, publicKey, privateKey) => {
if (err) throw err;
console.log('RSA key pair generated:');
console.log(`Public key: ${publicKey}`);
console.log(`Private key: ${privateKey}`);
});
这段代码通过传入选项对象,指定了生成密钥对时所使用的参数。其中,modulusLength
表示密钥的长度为 4096,publicKeyEncoding
和 privateKeyEncoding
分别指定了公钥和私钥使用的编码格式和类型。
运行上述代码,就可以看到生成的 RSA 密钥对的公钥和私钥的 PEM 格式的字符串,如下所示:
RSA key pair generated:
Public key: -----BEGIN RSA PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtKPNfl2Sf8vbtUgs/iLt
...
-----END RSA PUBLIC KEY-----
Private key: -----BEGIN RSA PRIVATE KEY-----
MIIJKAIBAAKCAgEAtKPNfl2Sf8vbtUgs/iLt...
-----END RSA PRIVATE KEY-----
generateKeyPair()
方法提供了两种调用方式:异步和同步。上文中的示例代码是异步调用的,但是也可以使用同步调用方法 generateKeyPairSync()
。下面是同步调用的示例代码:
const crypto = require('crypto');
const options = {
modulusLength: 4096,
publicKeyEncoding: {
type: 'pkcs1',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs1',
format: 'pem'
}
};
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', options);
console.log('RSA key pair generated:');
console.log(`Public key: ${publicKey}`);
console.log(`Private key: ${privateKey}`);
两个方法的区别就在于,异步调用需要传入回调函数,而同步调用则直接返回密钥对对象(包括公钥和私钥)。
generateKeyPair()
方法是一个非常实用的加密工具。通过它,我们可以方便地生成密钥对,用于各种加密和解密场景。在使用过程中,需要关注选项对象中的各个属性的含义和用法。同时,异步和同步调用方法也需要根据具体场景进行选择。