c - 从 C 中的 .pem 文件中读取 EC 公钥

标签 c openssl public-key elliptic-curve

我使用以下方法生成了一个 EC 公钥和私钥对:

openssl ecparam -name prime256v1 -genkey -noout -out ecprikey.pem
openssl ec -in ecprikey.pem -pubout -out ecpubkey.pem

我想将公钥读入 C 中的字节数组。我该怎么做?只是从文件中读取?还是 OpenSSL 提供了什么?谢谢你!

最佳答案

I want to read the public key into a byte array in C...



好吧,磁盘上的 key 很可能是 PEM 编码的。因为它是一个公钥,它可能具有 -----BEGIN PUBLIC KEY----- 的封装前和封装后边界。和 -----END PUBLIC KEY----- .您可以使用标准库函数来阅读它。

您也可以使用 PEM_read_PUBKEY 读取公钥.该函数返回 EVP_PKEY* .我相信你可以转换EVP_PKEY*EC_KEY*和:
EC_KEY* ecKey = EVP_PKEY_get1_EC_KEY(pKey);
get1以上意味着键上的引用计数被碰撞(而不是 get0 )。请务必调用EC_KEY_free完成后。

我不确定如何将公钥读入给定 EVP_PKEY* 的数组中。或 EC_KEY* .至少有两条信息:曲线(如 secp256k1)和公共(public)元素(曲线上的一个点,由 (x,y) 坐标组成)。如果指定曲线(即 OID)不存在(即缺少 OPENSSL_EC_NAMED_CURVE 标志),则您拥有所有域参数,如 p , a , b , G等。也许您应该查看 ASN.1/DER 编码。我想这就是你要得到的壁橱。

关于c - 从 C 中的 .pem 文件中读取 EC 公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963710/

相关文章:

python - 在 Docker Alpine Linux 3.3 中无法使用 OpenSSL 1.0.2g 和 Python 2.7 出现 "pip install cryptography"

node.js - Nodejs createCipher 与 createCipheriv

security - JWT RS256:通过https获取公共(public) key 是否安全?

certificate - 如何解码自签名证书

c++ - 从文件加载 RSA 公钥时遇到问题

c - `bash: ./a.out: No such file or directory` 运行由 `ld` 生成的可执行文件

c - 为什么第二个printf打印0

php - 库与 OpenSSL 和 PHP 5.3.3 冲突?

c++ - C 中移位运算符的真正强大用途是什么?

C位屏蔽AND运算问题