使用openssl生成未签名的RSA公钥

时间:2018-03-23 05:32:03

标签: openssl rsa public-key

以下代码被简化为演示具有OpenSSL库的普通RSA公钥:

RSA_ptr rsa(RSA_new(), ::RSA_free);
BN_ptr bn(BN_new(), ::BN_free);
BN_set_word(bn.get(), RSA_F4);  //65535
RSA_generate_key_ex(rsa.get(), 320, bn.get(), NULL);
BIO * keybio = BIO_new(BIO_s_mem());
i2d_RSAPublicKey_bio(keybio, rsa.get());
char buffer2 [2048];
size_t pubKeyBufferSize = BIO_read (keybio, buffer2, 320);
std::cout << Convert::BinToHexString(buffer2, pubKeyBufferSize); //using here our internal routine to print binary data

此输出将以DER ANS.1格式提供二进制数据,如下所示:

30 ;SEQUENCE
  30 02 29 ;SEQUENCE + size
    00 ;leading zero of INTEGER
    CCEE6526AE9D4380B670A23F55B840F8C5D8CC784E06E123C126753525FDFE1949...
  02 03 ;SEQUENCE + size
    010001

现在,“INTEGER的前导零”部分存在表示以下值为正值整数。但是,由于一些遗留原因,我需要摆脱它。

我正在通过openssl源发现,通过DER构造,它的存在是基于ASN1_VALUE-&gt; type&amp; V_ASN1_NEG,但我无法追踪将生成的PublicKey设置为V_ASN1_NEG的位置(或影响它生成为负数)。

处理这个的其他方法是编写我自己的TLV-DER解析器并重新打包这几个字节以符合我的需要,但是如果有意义的话,我宁愿强制API为我这样做。

你对此有什么建议吗?

0 个答案:

没有答案