当使用以下函数生成1024位的RSA密钥对时。
rsa_key = RSA_generate_key ( 1024, 3, NULL, NULL );
keyPair = BIO_new ( BIO_s_mem ( ) );
PEM_write_bio_RSAPrivateKey(keyPair, rsa_key, NULL, NULL, 0, NULL, NULL);
keyPair_len = BIO_pending(keyPair);
然后获得的keyPair_len不是1024,而是882。 是什么原因导致它减少了。
通过使用RSA_generate_key()函数,我们生成密钥对或仅生成私钥。 如果是这样,当我们从中提取私钥和公钥时,它会生成不同长度的私钥和公钥。
evp_key = EVP_PKEY_new();
ret = EVP_PKEY_assign_RSA ( evp_key, rsa_key );
pri = BIO_new ( BIO_s_mem ( ) );
pub = BIO_new ( BIO_s_mem ( ) );
PEM_write_bio_PrivateKey ( pri, evp_key, NULL, NULL, 0, NULL, NULL );
PEM_write_bio_PUBKEY ( pub, evp_key );
pri_len = BIO_pending(pri);
pub_len = BIO_pending(pub);
pri_len pub_len的长度分别为916和272。 任何人都可以帮助理解为什么会这样吗?
答案 0 :(得分:1)
生成模数大小为1024 位而非字节的RSA密钥。私钥基本上包含公钥信息,因此在任何表示中(无论是DER还是PEM)它都会更大。
您获得的结果不是这些模数大小,而是在PEM中编码的ASN.1结构的大小。甚至是-----BEGIN PUBLIC KEY-----
的东西。
更多相关信息: https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem