当前位置: 首页 > 知识库问答 >
问题:

如何使用openssl中的BIO从pem文件读取公钥?

陈富
2023-03-14

我正在使用openssl库,我想用BIO从. pem文件中读取公钥。我尝试了这个,但我的rsa变量仍然未初始化:

 RSA *rsa = RSA_new();

 BIO *keybio = NULL;

 keybio = BIO_new(BIO_s_file());
 BIO_read_filename(keybio, "public.pem");

 // and also tried this instead of last two lines:
 // keybio = BIO_new_file("public.rem", "r");

 rsa = PEM_read_bio_RSA_PUBKEY(keybio, &rsa, NULL, NULL);

当我调试应用程序时,它向我显示如下内容:

rsa { padding = ???, n = ??? , ...} 
rsa->n <unable to read from memory> and so on for all rsa fields.

我的文件有效,密钥是按照PKCS#1格式生成的。我用asn1解析器解析了它。

共有1个答案

芮琛
2023-03-14

你的代码看起来很好。尝试以下输入:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1IHYYTavz9PQRxpcyO7J
m0dtiIjNUvW3coLQQKhq+wySTTN1cwm2zYTw0FSfLDPOtOBNXFwKF9wykiyHS2uU
D8vIU+T/fvlcADYTtZqdC5AoBWlSuhp0xqqtHmNUEjGa4FpRmKusL8s5/cuAfNRV
NVSxA3JCN3kYrT9Q1qBN+XbOQn+h7gPQU3ICmG7L1R/CwIsq/wwUbq+NeY0TMvz5
LM6AIS+GCV0UeJVm6UN6GDBCOHk02XuplyhkbCsNhq+HTfhHVeE1s7NcIavmgvqm
EtlIcTGemW9tXs5/REZUv+SDpR6RLUKhwuij/Ft5Pe9b7cH3wXqNmOBhJ3F/ht2C
swIDAQAB
-----END PUBLIC KEY-----

将其与您在asn1解析器中看到的内容进行比较:

$ openssl asn1parse -in public.pem
    0:d=0  hl=4 l= 290 cons: SEQUENCE          
    4:d=1  hl=2 l=  13 cons: SEQUENCE          
    6:d=2  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   17:d=2  hl=2 l=   0 prim: NULL              
   19:d=1  hl=4 l= 271 prim: BIT STRING        
 类似资料:
  • 我使用openssl从曲线“secp128r1”生成ECC的密钥对 我遵循的步骤: > 首先,我使用命令生成了一个私钥 openssl ecparam -genkey -name secp128r1 -noout -out private.pem 然后,我使用命令查看了相应的公钥 openssl ec-inprivate.pem-text-noout 它显示的输出如下: 读取EC密钥 私钥:(12

  • 以下命令生成一个包含公钥和私钥的文件: 资料来源:这里 使用OpenSSL,私钥也包含公钥信息,因此公钥不需要单独生成 如何从私钥中提取公钥。pem文件? 谢谢

  • 在我们的一个应用程序中,私钥使用BouncyCastle的PEMWriter存储。目前,我正在研究我们是否可以摆脱BouncyCastle依赖关系,因为Java7似乎拥有我们需要的一切。唯一的问题是我不能读取存储在数据库中的私钥作为PEM编码的字符串(证书/公钥很好)。 如果我将PEM编码的私钥字符串从数据库保存到一个文件中,我可以运行OpenSSL将密钥转换为PKCS#8格式,如下所示: 我可以

  • 问题内容: 我有PEM格式+ PKCS#1(我想)的RSA公钥: 我想在Python中获取其ASN1编码版本的SHA1摘要。第一步应该是读取此密钥,但是我在PyCrypto中无法做到这一点: PyCrypto的文档说支持PEM + PKCS#1,所以我很困惑。我也尝试过M2Crypto,但事实证明M2Crypto不支持PKCS#1,而仅支持X.509。 问题答案: PyCrypto支持 PKCS#

  • 问题内容: 如何使用公共密钥加密大文件,以使只有拥有私有密钥的人才能解密该文件? 我可以使RSA公共和私有密钥生效,但是在使用以下命令加密大型文件时: 以及如何执行解密… 我通过以下命令创建我的私钥和公钥 我收到此错误: 我尝试制作大小从1024到1200位的键,没有运气,同样的错误 问题答案: 公钥加密不适用于对任意长文件进行加密。人们使用对称密码(例如AES)进行常规加密。每次生成,使用并使用

  • 我使用以下openssl命令生成私钥/公钥对,并使用openssl加密(短)消息: 然后我尝试使用以下java代码来解密加密的消息: 当使用 我明白了 我总是会遇到这种异常,不管用openssl加密的密钥(用长度为8192字节的密钥进行实验)或原始文本(用一个字符进行尝试)有多长。 我的主要问题是: > 这个错误消息真的是由于众所周知的RSA消息大小限制,还是我在这里做错了什么,所以引发了同样的异