我使用以下方法生成了一个 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/