首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Openssl获取pubkey :ECDSA

如何使用Openssl获取pubkey :ECDSA
EN

Stack Overflow用户
提问于 2021-04-17 12:35:44
回答 1查看 56关注 0票数 0

我想使用ecdsa的基本函数:keygen\sign\verify。在阅读文档openssl/ecdsa之后

我这样写:

代码语言:javascript
运行
复制
#include <openssl/ecdsa.h>
#include <openssl/sha.h>
#include <openssl/obj_mac.h> // for NID_secp192k1\  
#include <stdio.h>
int main(int argc, char **argv){
  int ret;
  ECDSA_SIG *sig;
  EC_KEY *eckey;
  eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
  EC_KEY_generate_key(eckey);
  sig = ECDSA_SIG_new();
  if (eckey == NULL)
    printf("err1");
  unsigned char dgst[] = "test";
  unsigned char res[32];
  SHA256(dgst, 32, res);
  for (int i = 0; i < 32; i++)
  {
    printf("%02x", res[i]);
  }
  sig = ECDSA_do_sign(res, 32, eckey);
  if (sig == NULL)
    printf("err\n");
  printf("\n");
  ret = ECDSA_do_verify(res, 32, sig, eckey);
  printf("%d\n", ret);
}

这段代码起作用了。但是,在ECDSA_do_Verify中,输入是eckey,包括公钥和私钥。但我只想使用pubkey来验证。那么我该如何实现这个目标呢?

任何帮助都将不胜感激。

EN

Stack Overflow用户

回答已采纳

发布于 2021-04-17 13:25:30

代码语言:javascript
运行
复制
#include <openssl/x509.h>
...
unsigned char *ptr = NULL;
int n = i2d_EC_PUBKEY (eckey, &ptr); // 'export' a representation of the publickey 
const unsigned char *copy = ptr;
EC_KEY * ecpub = d2i_EC_PUBKEY (NULL, &copy, n); // 'import' it to a new object
OPENSSL_free (ptr); // for real code, not needed for a test hack like yours

当然,在实际的应用程序中,您需要将密钥对存储在某个位置,并可能获得公钥的证书,前者和后者肯定已经提供了一个外部化的公钥供回读。

PS:我忘了说,你正在使用一个32字节的缓冲区dgst作为SHA256()的输入,但是dgst只有5个字节,所以这在技术上是未定义的行为(可以做任何事情),实际上可能会使用dgst之后内存中碰巧出现的任何随机垃圾,这会使你的结果无法重现和验证。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67134691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档