赞
踩
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.测试结果
生成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文件的一些参数,主要是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在线密接网站:https://the-x.cn/zh-cn/cryptography/Sm2.aspx
本文程序第一部分通过公钥加密生成并打印密文,第二部分是输入一段密文,直接进行解密得出二进制明文,因此使用在线解密工具验证第一部分我们需要在左侧下边框里写入密文,在上边框写入我们的私钥,点击SM2私钥解密得出明文“登录消息”
验证第二部分我们同样放入私钥与欲加密明文,点击SM2私钥解密验证结果是否与代码生成结果一样即可。
对比发现两次结果相同,证明SM2加密解密代码正常运行。
关于strCipherTextHex内容的填写:
先用SM2公钥对欲加密消息进行加密,代码中生成二进制密文→十六进制密文→字符串格式,即为strCipherTextHex,将内容放入下图红框中的地方,对应私钥即可解密出原明文了,若使用其他私钥去进行解密,则会报错Sm2Decrypt fail解密失败。
使用其他公钥对应的私钥解密报错Sm2Decrypt fail解密失败。
之后可以尝试一下命令行编译与CMake编译,继续学习Linux下的C++开发。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。