c语言实现dh密钥协商算法,SM2算法第十三篇:SM2密钥协商协议的C语言实现

记录每一点小小的进展,今天终于把”SM2的C语言实现”的程序成功的运行起来了,下面记录了我的操作流程。

资源下载:

1、sm2源程序(C语言实现)

下载链接

2、静态库和动态库(libeay32.dll,libeay32.lib,ssleay32.dll,ssleay32.lib)

下载链接

step1:在Windows系统上安装openssl

可参考SM2算法第七篇:Windows下Openssl安装与配置,在那篇博客中,我严格按照前辈们给出的步骤操作的,但是结果仍然报错,NNAME:fatal error U1077:"c\windows\system32\cl.exe”:return code "0x2”,这个错误导致的结果是,没能成功产生静态库libeay32.lib和ssleay32.lib(位于out32文件夹下),动态库libeay32.dll,libeay32.lib,ssleay32.dll,ssleay32.lib(位于out32dll文件夹下)。这当然导致我的程序无法正常运行。所幸,今早down到了以上需要的静态库和动态库,并且将相应库添加在了out32(若没有该文件夹可以自己创建)和out32dll文件夹下。

不要忘了为VC添加头文件和静态链接库路径,可参考SM2算法第七篇:Windows下Openssl安装与配置

step2:找到sm2.dsw文件(文件类型是VC++6 Workspace),如下,用VC++6.0打开

832317df685a939e149d454c1c1433cb.png

e0ed5781d5155623d01cfc03b1770a8f.png

step2:打开sm2.c —> 编译(compile) —> build,没有报错

23bbb37bd83a29ecf98e65c73b46181f.png

step3:点击Go(F5)运行,报错

c4e9ba4635d213db2c6d6febee93689a.png

step4:将下载好的libeay32.dll拷贝到C:\Windows\System32目录下

05d642b56c66b0024ee3950b9e69d340.png

step5:点击Go(F5)运行,结果一闪而过,控制台出现如下信息

a7292d72d5d1b7e9ee67d5f0e80e7087.png

step6:不要着急,没有犯错,以上信息是正常的。如何才能看到运行结果呢?用“Ctrl+F5”组合键的方式去运行程序即可出现如下结果

aa28ad3e5690f178e2cacc2156560e8c.png

虽然程序运行结果已经出来了,但是,上面输出的结果都是些什么意思啊?这是我下一步需要搞懂的地方。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 国密算法SM2是我国自主设计的一种非对称加密算法,主要用于数字签名和密钥交换。随着信息安全需求的增强,SM2算法在我国的应用越来越广泛。 SM2算法C语言实现可以通过调用相关库函数来完成。通常使用的是开源的RSA和EC库来实现SM2算法。以下是可能的实现步骤: 1. 引入相关库:在C语言代码中引入SM2算法所需要的RSA和EC库函数。 2. 生成密钥对:使用EC库函数生成SM2算法所需的密钥对。密钥对包括公钥和私钥,用于加密和解密数据。 3. 数据加密:使用RSA库函数对需要加密的数据进行加密处理。加密过程中使用公钥对数据进行加密,得到密文。 4. 数据解密:使用RSA库函数对密文进行解密处理。解密过程中使用私钥对密文进行解密,得到明文数据。 5. 数字签名:使用EC库函数对数据进行数字签名。数字签名过程中使用私钥对数据进行签名,得到签名结果。 6. 验证签名:使用EC库函数对签名结果进行验证。验证过程中使用公钥对签名结果进行验证,确定签名的有效性。 以上只是实现SM2算法的大致步骤,具体实现还需要根据具体需求进行调整和补充。此外,为了保证算法的安全性,还需要对密钥进行安全的管理与存储。 总之,通过调用相关库函数,可以实现SM2算法C语言实现,为信息安全提供了有效的保障。 ### 回答2: 国密算法SM2是我国自主研发的一种基于椭圆曲线密码学的公钥加密算法,用于实现数字签名、密钥交换和加密等功能。 要实现SM2算法C语言代码,可以按照以下步骤进行: 1. 导入相关的库文件:在C语言中,需要导入相关的库文件来支持椭圆曲线运算和密码学算法实现。例如,在OpenSSL库中,可以使用`#include <openssl/sm2.h>`来导入SM2算法相关的头文件。 2. 生成密钥对:在SM2算法中,需要首先生成一对公私钥对。可以使用库中的API函数,如`EVP_PKEY *gen_keypair();`来生成一个SM2密钥对。 3. 进行数字签名:假设要对某个消息进行数字签名,可以使用API函数`int sm2_sign(const EVP_MD *md, const unsigned char *msg, size_t msglen, const unsigned char *id, size_t idlen, const EVP_PKEY *pkey, unsigned char *sig, size_t *siglen);`。在函数参数中,md表示哈希算法、msg表示消息、id表示用户标识、pkey表示私钥,sig表示签名输出。 4. 验证数字签名:使用API函数`int sm2_verify(const EVP_MD *md, const unsigned char *msg, size_t msglen, const unsigned char *id, size_t idlen, const EVP_PKEY *pkey, const unsigned char *sig, size_t siglen);`来验证数字签名。在函数参数中,md表示哈希算法、msg表示消息、id表示用户标识、pkey表示公钥,sig表示需要验证的签名。 以上为简要的SM2算法C语言实现的步骤,具体的代码实现需要结合具体的库文件和API函数进行。希望以上回答对你有帮助! ### 回答3: 国密算法SM2是由中国密码学家自主研发的一种非对称加密算法,主要用于数字签名和密钥交换。C语言是一种广泛应用于系统编程和嵌入式开发的编程语言,具有良好的性能和跨平台特性。实现国密算法SM2C语言版本,可以使算法在不同的硬件和操作系统上运行。 实现SM2算法C语言版本需要以下几个核心步骤: 1. 导入必要的头文件和库:C语言中,需要导入相关的头文件和库才能使用算法所需的函数和数据类型。 2. 生成密钥对:使用C语言的随机数生成函数生成SM2算法所需的私钥和公钥。 3. 数据加密和解密:使用C语言的加密和解密函数调用SM2算法中的相应函数进行数据的加密和解密。 4. 数字签名和验证:使用C语言的哈希函数计算消息摘要,然后调用SM2算法中的数字签名和验证函数进行签名和验证操作。 5. 密钥交换:通过调用SM2算法中的密钥交换函数,实现双方之间的密钥交换。 6. 进行测试和调试:使用C语言的单元测试框架对实现算法进行测试和调试,确保算法的正确性和稳定性。 总结来说,实现国密算法SM2C语言版本需要导入相关的头文件和库,生成密钥对,进行数据加密和解密,实现数字签名和验证,以及实现密钥交换等功能。通过测试和调试保证算法的正确性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值