当前位置: 首页 > news >正文

openssl编程之sm2密钥生成

#include <openssl/evp.h>
#include <openssl/asn1.h>
// 从PKCS8编码中获得公钥
int lbxx_pkcs8_d2i_sm2_pubkey(unsigned char* pucDer, unsigned int puiLen, unsigned char* pucPubkey, unsigned int* uiKeylen)
{int len = 0;unsigned char* buf = NULL;EVP_PKEY* pKey = NULL;pKey = d2i_PUBKEY(NULL, (const unsigned char**)&pucDer, puiLen);if (!pKey) {return 1;}len = i2o_ECPublicKey((EC_KEY*)EVP_PKEY_get0(pKey), &buf);if (*uiKeylen < len) {return 1;}memcpy(pucPubkey, buf, len);*uiKeylen = len;return 0;
}
int openssl_sm2() {int ret = 0;// 必须为NULLunsigned char* pucDer = NULL,*priDer=NULL;unsigned int upucDerlen = 0,upriDerlen=0;unsigned char buf[128] = { 0 };unsigned int len = sizeof(buf);ret = lbxx_pkcs8_i2d_sm2_generate_key(&pucDer, &upucDerlen,&priDer,&upriDerlen);if (ret != 0) {printf("call lbxx_pkcs8_i2d_sm2_generate_pubkey() error\n");return 1;}//printf("sm2 prikey: ");//for (int i = 0; i < upriDerlen; i++) {//	printf("%02x", priDer[i]);//}//printf("\n");//printf("sm2 pubkey: ");//for (int i = 0; i < upucDerlen; i++) {//	printf("%02x", pucDer[i]);//}//printf("\n");//print_raw_sm2_keys(priDer,upriDerlen,pucDer,upucDerlen);OPENSSL_free(pucDer);OPENSSL_free(priDer);return 0;
}

image

http://www.hskmm.com/?act=detail&tid=1035

相关文章:

  • 查看mysql具体使用那个glibc的版本的mysql
  • 【A】月半猫想吃麦当劳(待完坑)
  • 【A】宝宝肚肚打雷了(待完坑)
  • 01_TCP协议概念
  • 【A】杂题宣讲(待完坑)
  • 登录认证-上篇:基于 Session 的传统身份验证
  • 【A】chipi chipi chapa chapa
  • vLLM框架本地布署Qwen3-32B模型 - yi
  • 项目管理软件中有哪些不同的模块以及如何导出其报告?
  • Kubernetes命名空间(Namespace)
  • linux安装python
  • 【IEEE、电力学科品牌会议】第五届智能电力与系统国际学术会议(ICIPS 2025)
  • Vllm部署大模型
  • CE第9关X64版本问题记录
  • 题解:P14013 [POCamp 2023] 送钱 / The Generous Traveler
  • 第十三届 TCCT 随机系统与控制专题研讨会 暨2025年智能控制与计算科学国际学术会议 (ICICCS 2025)
  • 注释
  • Microsoft 推出 .NET 10 RC 1
  • 2025 第九届控制工程与先进算法国际论坛(IWCEAA 2025)
  • 高等代数 I
  • kotlin中的netty
  • 多态
  • 数学分析 I note
  • 高等代数 I note
  • JAVA反编译神器CFR
  • 记录一下由于VS中qt的插件自动升级引发的编译问题
  • flutter右滑返回直接返回到native问题
  • ck随笔
  • 如何用变量与函数实现随机生成数字交互?附完整教程
  • 离散数学与分析 note