在上一篇文章中《通过openssl生成sm2的公私钥的方法》介绍了如何在openssl系统中生成公私钥对,如何对生成的公私钥对进行验证呢?

在ecparam.c中,添加加解密的代码就可以了,还在《通过openssl生成sm2的公私钥的方法》添加公钥的地方,432行,在生成公钥之后,添加代码如下:

            i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,NULL, 0, NULL, NULL);//生成私钥//以下为添加代码i = PEM_write_bio_EC_PUBKEY(out, eckey);//生成公钥const char *message = "encryption test data";//测试数据const size_t msg_len = strlen(message);printf("%s\n",message);uint8_t *ctext = NULL;size_t ctext_len = 0;const EVP_MD *digest=EVP_sm3();//摘要方法是sm3sm2_ciphertext_size(eckey, digest, msg_len, &ctext_len);ctext = OPENSSL_zalloc(ctext_len);sm2_encrypt(eckey, digest, (const uint8_t *)message, msg_len,ctext, &ctext_len);//加密printf("%s\n",ctext);//加密后数据uint8_t *recovered = NULL;size_t recovered_len = msg_len;size_t ptext_len = 0;sm2_plaintext_size(eckey, digest, ctext_len, &ptext_len);recovered = OPENSSL_zalloc(ptext_len);sm2_decrypt(eckey, digest, ctext, ctext_len, recovered, &recovered_len);//解密printf("%s\n",recovered);//解密后的数据

然后在ecparam.c中添加sm2的头文件

# include "internal/sm2.h"

在apps下面的build.info中添加crypto的依赖

  INCLUDE[openssl]=.. ../include ../crypto/includeDEPEND[openssl]=libapps.a ../libcrypto.a ../libssl

在openssl目录下,make

然后在apps下面执行

./openssl ecparam -name SM2 -genkey

输出如下:

-----BEGIN EC PARAMETERS-----
BgUrgQQAIA==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MGkCAQEEHQDyYYowd8TUhF3XiXX9R0XRsvTkNaVFYcJGR/6CoAcGBSuBBAAgoTwD
OgAEkq2eq2oLsAnQ4n4Rd00Y6ppaj+8oCc5C0x5k4JktJemrBFJdkDoPLJrQWRFa
Mc4FiQ+i33LFE44=
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
ME4wEAYHKoZIzj0CAQYFK4EEACADOgAEkq2eq2oLsAnQ4n4Rd00Y6ppaj+8oCc5C
0x5k4JktJemrBFJdkDoPLJrQWRFaMc4FiQ+i33LFE44=
-----END PUBLIC KEY-----
encryption test data
0uD�mߪ4����~|Fi�o���2�Xں:��
encryption test data

在加密前和加密后的数据均为,encryption test data,完成验证。

在openssl中对SM2的公私钥进行加解密的验证相关推荐

  1. SM2 生成公钥私钥 签名 加解密 亲测可用

    引入pom依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava< ...

  2. 国产sm2,sm3,sm4加解密

    有个为国家做的项目,其中需求是必须要用国产的加密,最后经项目组讨论后决定用国产sm2加密 本人用vue开发前端所以一下实在vue中用的方法, 国密相关介绍 国密算法是国家密码局制定标准的一系列算法,主 ...

  3. 国产sm2,sm3,sm4加解密兼容ie问题

    之前有个文章是写国产sm2,sm3,sm4加解密的,但是在IE浏览器中会出现如下报错: 找问题找了许久终于终于找到了.原因是在sm2,sm3,sm4的加密算法中用到了一个叫jsbn这个依赖.然而这个依 ...

  4. php RSA公钥私钥加解密和验证用法

    现在很多项目中会使用到rsa加解密和验证相关的技术,分别整理代码如下,方便记忆和使用. [签名和验证] 1 //获得签名 2 function getSign($data) { 3 $pem = 'm ...

  5. openssl gmssl SM2 公私钥生成 加密解密命令

    openssl 从 1.1.1 开始支持 sm2.gmssl 基于openssl 添加了对国密的支持. 检测 openssl 是否支持 SM2 openssl ecparam -list_curves ...

  6. RSA公私钥加密加签顺序

    RSA是一种非对称加密的机制,是一对密钥对(公钥和私钥). 一.加密: 1.公钥加密,私钥解密.可以多人持有公钥进行数据加密,仅一人持有私钥进行数据解密: 2.可以确保数据传输的安全性. 二.加签: ...

  7. RSA生成公私钥并加解密

    1.RSA简介 RSA是目前使用最广泛的公钥密码体制之一,可以实现非对称加密.它是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leona ...

  8. 使用JDK中的安全包对数据进行加解密

    本文以使用DES对称加密算法为例使用jdk对数据进行加密解密. 首先需要了解Provider类,它是jdk引入的密码服务提供者概念,实现了Java安全性的一部分或者全部.Provider 可能实现的服 ...

  9. RSA公私钥格式分析及其在Java和Openssl之间的转换方法

    文章目录 PKCS#1和PKCS#8 X.509公钥证书 ASN.1抽象语法标记 DER和PEM编码 OID对象标识符 用openssl命令生成PKCS1#格式的RSA密钥对 生成私钥 从私钥中导出公 ...

最新文章

  1. SAP 库存相关表格
  2. WPF中用于嵌入其他进程窗口的自定义控件(AppContainer)
  3. Mybatis插入数据后获取主键的值
  4. 3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
  5. mysql 导出dmp文件_一文带你了解MySQL主从复制(Master-Slave)
  6. xsync 集群同步脚本介绍(拷贝文件不同的部分)
  7. 鼠标移开事件(onmouseout)
  8. android 车牌自动识别,Android端车牌识别可以用来实现摄像头扫描识别车牌?
  9. 高通9008端口刷linux,高通命令进入9008端口方式汇总
  10. 【线性代数笔记】矩阵的合同关系
  11. 离散数学知识点总结(4):合取范式,析取范式
  12. 石墨烯气凝胶的3D打印-气凝胶(Aerogels)是世界上最轻的材料之一,石墨烯气凝胶(Graphene aerogel)又是该品类中最轻的一种
  13. 时间类计算:双代号网络图、单代号网络图、时标网络图
  14. Option3X 5G 全网部署(基于 IUV_5G 软件)
  15. php微信支付需要哪些设置,如何申请和配置微信支付接口?
  16. App移动应用测试点总结
  17. labview运行excel宏_LabVIEW中Excel报告生成功能开发
  18. PB调用http协议接口(WebAPI)
  19. 警惕新型钓鱼邮件诈骗~伪装的“再次发送”邮件
  20. ElementUI 获取el-table表格选中行信息及清除选中行

热门文章

  1. C#技巧 Lazy(延迟初始化)用法
  2. 同步,异步,并行概念的歪解
  3. 原生革命--跨平台开发技术解析
  4. 满天星java代码6_java实现的满天星效果的方法
  5. AHK 区域找图功能的使用和实例子
  6. window下登录阿里linux云服务器及ssh登录配置
  7. 习题 5.7 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)。
  8. 一文理清---TSN时间敏感网络
  9. Snort 入侵检测系统简介
  10. 低代码可以做什么?以织信informat这个平台为例说说