【问题标题】:Load ECIES public key加载 ECIES 公钥
【发布时间】:2021-08-17 23:52:45
【问题描述】:

[生成的公钥跟随 (https://jameshfisher.com/2017/04/14/openssl-ecc/)

Alice 生成她的私钥:

openssl ecparam -name secp256k1 -genkey -noout -out alice_priv_key.pem

Alice 从她的私钥中提取她的公钥:

openssl ec -in alice_priv_key.pem -pubout -out alice_pub_key.pem

当我需要使用公钥发送加密数据时,我有一个 C 应用程序。我正在尝试从公共 (alice_pub_key.pem) 文件中加载数据。

我将 PEM 文件从 (https://holtstrom.com/michael/tools/hextopem.php) 转换为十六进制数据。

看来我没有以正确的格式提供数据。任何人都可以建议出了什么问题?

key = EC_KEY_new_by_curve_name(NID_secp256k1)
group = EC_KEY_get0_group(key)
pub_key = EC_POINT_new(group)
EC_POINT * point = EC_POINT_hex2point(group, ptr, pub_key, NULL)

这点返回null

【问题讨论】:

  • 你为什么首先使用十六进制作为中间格式?为什么不直接加载 PEM?
  • @MaartenBodewes 感谢您的快速响应-----BEGIN PUBLIC KEY----- MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEjWrT7F97QrSqGrlIgPK8dphNBicNO6gD LfOIMjhF2MiLuuzd7L7BP+bLCuNtKKe/2dOkgPqgXv4BFWqgp6PZXQ== -----END PUBLIC KEY----- 这是生成的公钥。当我将其作为缓冲区传递时,它失败了。然后我检查了一些文档,其中提到数据需要以十六进制形式传递。所以我无法找到如何传递对等公钥来获取 X 和 Y 坐标或将共享公钥加载到我生成的 ECC 私钥中,
  • 您拥有的是一个 PEM 格式的 SubjectPublicKeyInfo 结构,其中包含一个 EC 公钥。现在这一切都很好而且花花公子,但我似乎无法找到自己如何解析该结构,例如使用 EVP BIO 功能。这应该是可能的,但如果我能找到它。请注意,您上面的代码并不完整,发布一个更完整的示例应该会有所帮助,因为目前我们不知道 ptr 包含什么。
  • 呃,你能试试PEM_read_bio_EC_PUBKEY吗?我不确定它是否支持 PUBLIC KEY 而不是 EC PUBLIC KEY(因为 OpenSSL 文档很烂),但这可以修复。
  • @ MaartenBodewes`PTR是pem2Hex值的char * PTR = “3056301006072A8648CE3D020106052B8104000A034200048D6AD3EC5F7B42B4AA1AB94880F2BC76984D06270D3BA8032DF388323845D8C88BBAECDDECBEC13FE6CB0AE36D28A7BFD9D3A480FAA05EFE01156AA0A7A3D95D”; EC_KEY *key = NULL; EC_POINT *pub_key;常量 EC_GROUP *组;键= EC_KEY_new_by_curve_name(NID_secp256k1); group = EC_KEY_get0_group(key); pub_key = EC_POINT_new(组); EC_POINT * 点 = EC_POINT_hex2point(group, ptr, pub_key, NULL);EC_KEY_set_public_key(key, pub_key); if (!EC_KEY_check_key(key)) { printf(" failed") else printf("OK")

标签: encryption cryptography public-key-encryption elliptic-curve


【解决方案1】:

您可以尝试PEM_read_EC_PUBKEY 来读取公钥。这避免了必须解析或重新编码公钥本身。

请注意,您可能需要最近的 OpenSSL;很难从文档中找到这个功能是什么时候引入的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2013-07-22
    相关资源
    最近更新 更多