SM9加密实现记录---环境配置----真实记录,有冗余或错误步骤

今天我开始进行毕业设计的相关工作,首先我在gmssl官方的网站上了解了gmssl项目,然后根据国家密码局发布的SM9加密算法·,了解了相关流程,然后在知网上查询SM9加密算法的相关文章。然后选定了IEEE上的一篇文章作为翻译的文章。

 

perl Configure VC-WIN64A

nmake

nmake install

在工作之前我首先需要配置gmssl,因此我查询资料,了解配置gmssl环境的相关流程。

今天我首先配置了visual studio环境,下载了c++编程相关工具,然后下载安装了perl,然后安装了nasm,并且配置了相关环境变量,然后从github上下载了gmssl的源代码。

进行了编译。

但是由于之后我更换了设备后,一直无法完成编译,因此我使用虚拟机进行此实验。

首先我访问gmssl官网查询linux下编译安装gmssl库的方法。然后发现了和windows内一样的报错,关于glob,如下

File::Glob::glob() will disappear in perl 5.30. Use File::Glob::bsd_glob() instead. at Configure line 271.

发现需要更改configure文件。

This system (linux-x86_64) is not supported. See file INSTALL for details.由于ubuntu20.04给出了这样的报错,所以我暂时放弃。

在win10下,我下载了官方的zip,但是还是不行。

发现是perl的问题导致报错如下

Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module) 网络上的教程有错误,实际位置不对。

                                                                                              

解决后再编译,需要用到make或者nmake,这里我在vs安装目录下找到了nmake

设置环境变量后报错:

cl  /I "." /I "crypto\include" /I "include" -DOPENSSL_USE_APPLINK -DDSO_WIN32 -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DGMI_ASM -DPOLY1305_ASM "-DENGINESDIR=\"C:\\Program Files\\GmSSL\\lib\\engines-1_1\"" "-DOPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DUNICODE -D_UNICODE /MD /O2 /Zi /Fdossl_static -c /Focrypto\aes\aes_cfb.obj "crypto\aes\aes_cfb.c"

aes_cfb.c

c:\Users\MING\Desktop\graduate work\GmSSL-master\include\openssl/aes.h(15): fatal error C1083: 无法打开包括文件: “stddef.h”: No such file or directory

NMAKE : fatal error U1077: “"D:\visualstudio\Visual Studio IDE\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.EXE"”: 返 回代码“0x2”

Stop.

然后我发现需要配置cl的环境,即设置相关lib等,类似如下

PATH=D:\Program Files\Microsoft Visual Studio 10.0\VC\bin

INCLUDE=D:\Program Files\Microsoft Visual Studio 10.0\VC\include

LIB=D:\Program Files\Microsoft Visual Studio 10.0\VC\lib

 SM9加密实现记录---环境配置----真实记录,有冗余或错误步骤

 

 SM9加密实现记录---环境配置----真实记录,有冗余或错误步骤

 

 SM9加密实现记录---环境配置----真实记录,有冗余或错误步骤

 

 

 

 

再重启电脑。

还是不行,应该是因为输入INCLUDE时,打的不是英文的“;”。

 

更改之后报错

D:\visualstudio\Visual Studio IDE\Common7\IDE\VC\Linux\include\usr\lib\gcc\x86_64-linux-gnu\5\include\stddef.h(216): error C2371: “size_t”: 重定义;不同的基类型

crypto\aes\aes_cfb.c: note: 参见“size_t”的声明

NMAKE : fatal error U1077: “"D:\visualstudio\Visual Studio IDE\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.EXE"”: 返 回代码“0x2”

Stop.

 

 

后来发现不能用这个库,而应该使用windows kits中的文件,查询资料发现我没有选择安装在c盘而是D:\windows kits,然后还是出现报错

在解决之后,报错rc不是可执行程序,再将rc.exe的路径加入到path中。

 

报错ws2_32.lib无法打开

添加lib之后,需要注意根据设备型号加,看看是x64文件夹还是啥

 

然后报错

libcrypto-1_1-x64.def : error LNK2001: 无法解析的外部符号 EVP_get_ciphernames

libcrypto-1_1-x64.def : error LNK2001: 无法解析的外部符号 EVP_get_digestnames

 

 

按照教程更改names2.c后

bn_mul.obj : error LNK2019: 无法解析的外部符号 bn_sub_part_words,该符号在函数 bn_mul_part_recursive 中被引用

libcrypto-1_1-x64.dll : fatal error LNK1120: 1 个无法解析的外部命令

 

于是我查看该文件,实际上这个函数再bn_mul.c最开始就被定义

,那么我需要考虑这个函数是否受到其他部分的影响

 SM9加密实现记录---环境配置----真实记录,有冗余或错误步骤

 

 

然后取消掉上面的if defined

还是不行,编译报一堆莫名其妙的错误,然后看到网上说需要用vs的command编译,这里我转而使用vs的,添加了这个工具,参考如下

其实之前添加很多变量的步骤并不是必要的,只要使用visual studio的命令行即可。

 SM9加密实现记录---环境配置----真实记录,有冗余或错误步骤

结果无法创建目录,因为没有管理员权限,尝试使用管理员打开vs

发现在属性中没有兼容性这个选项,于是使用“运行”  gpedit.msc

计算机配置/管理模板/Windows组件/应用程序兼容性

修改后无果,然后我直接用暂时的管理员权限打开了程序,进行nmake install。没有报错。

安装可能已经完成,但是可能会有其它问题。

随后将gmssl.exe添加到path。Gmssl已经可以运行。

那么我现在需要实现的功能,就是更改gmssl的代码,使得gmssl可以进行sm9相关加密。

SM9加密实现记录---环境配置----真实记录,有冗余或错误步骤

 

上一篇:达梦DSC共享集群搭建


下一篇:实验2 汇编源程序编写与汇编、调试