OpenSSL C API - 在 DER 编码中获取 public 密钥的密钥长度

OpenSSL C API - getting keylength of public key in DER encoding

我想在 C 中使用 OpenSSL API 时确定以 DER 格式编码的 public 密钥的密钥长度。

使用以 PEM 格式编码的密钥来执行此操作非常简单:

FILE *fp = fopen(argv[1], "rb");
RSA *rsa_key = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
int keylength = RSA_size(rsa_key);

(假设要加载的key已经作为参数传入)

很遗憾,没有等效的 DER_read_RSA_PUBKEY 函数。 我一直在尝试使用 i2d_RSA_PUBKEY_fpd2i_RSA_PUBKEY_fp 但无济于事 - 只有分段错误。

_RSA_PUBKEY_RSAPublicKey之间的区别似乎是前者使用SubjectPublicKeyInfo(证书public key) 结构,后者使用 PKCS#1 RSAPublicKey 结构。

d2i_* 函数系列可用于将 DER 转换为 openssl 内部数据结构。

因此,您应该可以使用:

FILE *fp = fopen(argv[1], "rb");
RSA *rsa_key = d2i_RSAPublicKey_fp(fp, NULL);
int keylength = RSA_size(rsa_key);

实现你想要的。