今天我开始进行毕业设计的相关工作,首先我在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
再重启电脑。
还是不行,应该是因为输入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最开始就被定义
,那么我需要考虑这个函数是否受到其他部分的影响
然后取消掉上面的if defined
还是不行,编译报一堆莫名其妙的错误,然后看到网上说需要用vs的command编译,这里我转而使用vs的,添加了这个工具,参考如下
其实之前添加很多变量的步骤并不是必要的,只要使用visual studio的命令行即可。
结果无法创建目录,因为没有管理员权限,尝试使用管理员打开vs
发现在属性中没有兼容性这个选项,于是使用“运行” gpedit.msc
计算机配置/管理模板/Windows组件/应用程序兼容性
修改后无果,然后我直接用暂时的管理员权限打开了程序,进行nmake install。没有报错。
安装可能已经完成,但是可能会有其它问题。
随后将gmssl.exe添加到path。Gmssl已经可以运行。
那么我现在需要实现的功能,就是更改gmssl的代码,使得gmssl可以进行sm9相关加密。