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_fp
和 d2i_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);
实现你想要的。
我想在 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_fp
和 d2i_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);
实现你想要的。