我有一个长字符串,我想使用generateKeyPair对其进行加密和解密。 很明显,需要将字符串拆分为某些段。据我了解,到目前为止,每个段的最大值不应大于键长+填充。但是我们有两个密钥,显然公共密钥的长度较短,因此在加密时应该使用公共密钥的长度吗?那么我怎么能知道一个最初长度为N的字符串,在用公钥加密后将其长度分割为多少,以便将加密部分分块以用私钥解密时,它的长度是多少?
在解决上述问题之前,我进行了一些测试,以找出有关带有模数长度的键的长度的基本问题。因此,如果有人知道该主题,请给出一个简单的提示以使其易于理解。我使用了以下代码:
我用下面的方法可以生成一对:
const { generateKeyPairSync } = require('crypto');
const { publicKey, privateKey } = generateKeyPairSync('rsa', {
modulusLength: 512, // the length of your key in bits
publicKeyEncoding: {
type: 'spki', // recommended to be 'spki' by the Node.js docs
format: 'der'
},
privateKeyEncoding: {
type: 'pkcs8', // recommended to be 'pkcs8' by the Node.js docs
format: 'der',
cipher: 'aes-256-cbc', // *optional*
passphrase: 'top secret' // *optional*
}
});
然后我尝试记录键的长度:
console.log(publicKey,publicKey.length);
console.log(privateKey,privateKey.length);
作为示例的整个结果变为:
<Buffer 30 5c 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 4b 00 30 48 02 41
00 c8 12 7d f7 c0 d0 97 f0 d7 80 36 73 f2 b4 67 7f 35 cf 56 1f bd 49 fa 36 16 ..
. > 94
<Buffer 30 82 01 bd 30 57 06 09 2a 86 48 86 f7 0d 01 05 0d 30 4a 30 29 06 09 2a
86 48 86 f7 0d 01 05 0c 30 1c 04 08 d6 ed 6d 80 87 c2 2c f9 02 02 08 00 30 0c ..
. > 449
那么首先为什么私钥长度是449,而不是512?这是否意味着我们有512-449 = 63位?据我了解,填充与我们使用“ pem”格式而不是“ der”时在文本中生成的文本有关,因此我很困惑,为什么我在缓冲区中没有获得512位私钥。 谢谢