基于GMSSL实现的sm2加解密在vscode实现(C++)(自用)

这篇具有很好参考价值的文章主要介绍了基于GMSSL实现的sm2加解密在vscode实现(C++)(自用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


原文地址:https://blog.csdn.net/hacker_lpy/article/details/124211114
原文改进方案地址:https://blog.csdn.net/canlynetsky/article/details/131212028
本人最近刚刚开始学习Linux下的C++开发,不太习惯命令行编译程序,听说vscode挺好用,于是开始尝试使用vscode来编写程序,以下记录自己在跑通原文案例时遇到的一些问题。
本文使用的是gmutil.so动态库,使用时只需要包含头文件gmutil.h和gmutil.so动态库,封装的成动态库的目的是屏蔽openssl的头文件和符号,避免和其他版本的openssl产生冲突,达到多个openssl版本共存的目的(摘自原博客README.txt)

GMSSL库安装

gmssl库的安装参考文章https://blog.csdn.net/zyhse/article/details/112350363

编写项目过程

标准写程序流程:
1.创建文件夹打开vscode
2.创建文件夹include;lib;src;其中include放头文件;lib放引用库文件;src放源文件。
3.点击调试代码按钮,系统会自动生成tasks.json,也可以在设置中创建c_cpp_properties.json,launch.json,settings.json;个人觉得最有用的是tasks.json。
4.配置好json文件后继续运行代码生成可执行文件
5.测试结果

SM2公私钥对的生成

生成pem格式的私钥和der格式的公钥

gmssl ecparam -genkey -name sm2p256v1 -noout -out sm2-private-key.pem//生成pem格式的私钥
gmssl ec -pubout -in sm2-private-key.pem -outform DER -out sm2-public-key.der//生成der格式的公钥

将pem格式私钥转化为key格式

gmssl ec -in sm2-private-key.pem -outform PEM -out sm2-private-key.key//将pem格式私钥转化为key格式

将der格式的公钥转化为base64编码格式,跟Ubuntu版本有关,可能有的是别样的写法。

base64 < sm2-public-key.der > sm2-public-key.base64//将der格式的公钥转化为base64编码格式

将base64编码格式的公钥转化为key格式私钥

mv sm2-public-key.base64 sm2-public-key.key//将base64编码格式的公钥转化为key格式私钥

JSON文件配置

下面细说一下json文件的一些参数,主要是tasks.json的配置,主要需要引用三个库文件,分别是libcrypto.a,libssl.a,libgmutil.so:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                //下面句子表示你要编译的源文件,*.cpp表示该目录下的所有cpp文件
                "*.cpp",
                //-I后跟的路径表示头文件所在目录,若有多个目录就写多个-I
                "-I${workspaceFolder}/include",
                "-I${workspaceFolder}/include/openssl",
              	//-L后跟的是库目录的路径
                "-L${workspaceFolder}/lib",
                //-l表示的是引用的动态库或静态库文件,不用写前缀lib和后缀.*,如我这里是libcrypto.a和libssl.a和libgmutil.so
                "-lcrypto",
                "-lssl",
                "-lgmutil",
                //-o表示输出可执行文件的路径,切记-o要放在-L之后
                "-o",
                "${workspaceFolder}/test"
            ],
            //剩下的设置不是很重要,不需要改
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        },
      
}

运行结果

sm2 加密 c++,vscode,c++,ide

SM2在线密解工具用法

首先贴出sm2在线密接网站:https://the-x.cn/zh-cn/cryptography/Sm2.aspx

本文程序第一部分通过公钥加密生成并打印密文,第二部分是输入一段密文,直接进行解密得出二进制明文,因此使用在线解密工具验证第一部分我们需要在左侧下边框里写入密文,在上边框写入我们的私钥,点击SM2私钥解密得出明文“登录消息”
sm2 加密 c++,vscode,c++,ide

验证第二部分我们同样放入私钥与欲加密明文,点击SM2私钥解密验证结果是否与代码生成结果一样即可。
sm2 加密 c++,vscode,c++,ide

sm2 加密 c++,vscode,c++,ide
对比发现两次结果相同,证明SM2加密解密代码正常运行。

关于strCipherTextHex内容的填写:
先用SM2公钥对欲加密消息进行加密,代码中生成二进制密文→十六进制密文→字符串格式,即为strCipherTextHex,将内容放入下图红框中的地方,对应私钥即可解密出原明文了,若使用其他私钥去进行解密,则会报错Sm2Decrypt fail解密失败。
sm2 加密 c++,vscode,c++,ide
使用其他公钥对应的私钥解密报错Sm2Decrypt fail解密失败。
sm2 加密 c++,vscode,c++,ide

之后可以尝试一下命令行编译与CMake编译,继续学习Linux下的C++开发。文章来源地址https://www.toymoban.com/news/detail-797157.html

到了这里,关于基于GMSSL实现的sm2加解密在vscode实现(C++)(自用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端sm2国密加密解密

    1.下载国密包 2.获取后端的公钥 注sm-crypto使用BC库加解密前端密钥与后端密钥是两队,非常规的base64密钥 前端公钥需要在前面加04占位否则无法解密 3.前端使用公钥进行加密 生成的加密串加04方便后端解密 4.前端使用私钥解密

    2024年02月11日
    浏览(60)
  • 国密SM2前端加密解密示例

    目录 一、 安装sm2依赖 二、编写代码 1、data中绑定数据 2、公钥加密 3、私钥解密 4、按钮绑定一下,数据可见一下 三、完整代码 要改变的数据phone和过程数据copyphone,公钥publicKey和私钥privateKey 具体生成测试公钥私钥可参照SM2加解密 C1为65字节第1字节为压缩标识,这里固定为

    2024年02月03日
    浏览(66)
  • 国密SM2算法(JS加密,C#、Java解密)

    常见的渗透测试会将网站登录时密码使用明文传输视为风险。推荐使用国密算法或者RSA算法对密码进行加密传输。 RSA加密(JS加密,C#、Java解密)请参考《RSA对称加密(JS加密,C#、Java解密)》​​​​​​ 本文描述国密SM2算法的实现。 一、工作原理 前端js使用公钥进行加密

    2024年02月02日
    浏览(52)
  • OpenSSL 3.1.1 ECC 加密、解密、签名、验签(国密 sm2、sm3)

    openssl 3 默认废弃了 旧版本 (opessl 1.x) 的部分api 导致部分旧ecc 代码无法使用(可以通过配置编译选项打开) ,这里展示如何使用新接口用ECC 进行加密解密。 新接口是真的方便,基本上你都不需要懂啥密码学知识,对我们这种密码白痴来说太好了 头文件 生成密钥对 导出公

    2024年02月05日
    浏览(58)
  • 医保移动支付加密解密请求工具封装【国密SM2SM4】

    医保移动支付加密解密请求工具封装 定点医药机构向地方移动支付中心发起费用明细上传、支付下单、医保退费等交易时需要发送密文,由于各大医疗机构厂商的开发语各不相同,可能要有java的、c#的、python的、pb的、nodjs的、php的、还可能有Delphi的等。。。。很多开发语言

    2024年01月21日
    浏览(86)
  • 国密算法:利用python进行sm2非对称算法的实现,国密算法库gmssl的使用

    我们继续来进行国密算法的演示。 本篇演示sm2非对称算法的实现,国密算法库gmssl的使用。 sm2: 即椭圆曲线公钥密码算法,是由国家密码管理局发布的; 非对称加密算法,即有一对不一样的密钥:公钥和私钥,公钥用来加密,私钥用来解密; 公钥和私钥:公钥,可以公开。

    2024年02月06日
    浏览(59)
  • 国密算法SM2/3/4简单比较,以及基于Java的SM4(ECB模式,CBC模式)对称加解密实现

    常用的国密算法包含SM2,SM3,SM4。以下针对每个算法使用场景进行说明以比较其差异 SM2:非对称加密算法,可以替代RSA 数字签名,SM2为非对称加密,加解密使用一对私钥和公钥,只有签名发行者拥有私钥,可用于加密,其他需要验证解密或验签者使用公钥进行。如果使用公

    2024年04月13日
    浏览(39)
  • 基于hutool 封装国密sm2,sm4 加解密算法

    基于hutool 封装国密sm2,sm4 加解密算法 1. 加入依赖包 2. 编码

    2024年02月13日
    浏览(47)
  • Java实现SM2前后端加解密

    Sm2加解密原理,非对称加密,公钥加密,私钥解密。公私钥对成对生成,加密端解密端各自保存。用公钥加密必须要用对应的私钥才能解密,保证安全性。 这里我们实现的功能是前端加密,后端解密,这样前端暴露了公钥,后端持有配对的私钥,保证安全性。 1.jsp引入sm2 2

    2024年02月11日
    浏览(41)
  • 小程序 实现 国密 sm2 加密

    第一步:进入微信小程序项目目录下,输入cmd    第二步:加载插件包 第三步:加载成功之后,会参生这个文件夹     第四步:然后在对应的js文件中引入miniprogram-sm-crypto/index.js   第五步: 加密方式,加密方法  

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包