使用openssl

时间:2016-01-29 06:41:34

标签: openssl cryptography

当使用以下函数生成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。 任何人都可以帮助理解为什么会这样吗?

1 个答案:

答案 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