2021SC@SDUSC

GMSSL简介

GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。
GmSSL项目由北京大学关志副研究员的密码学研究组开发维护,项目源码托管于GitHub。自2014年发布以来,GmSSL已经在多个项目和产品中获得部署与应用,并获得2015年度“一铭杯”中国Linux软件大赛二等奖(年度最高奖项)与开源中国密码类推荐项目。GmSSL项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。
来源:http://gmssl.org

GMSSL开源代码:https://github.com/guanzhi/GmSSL

准备工作

1、 新版本visual studio,我这里使用的是vs2019
2、 安装ActivePerl
64位ActivePerl-5.26下载地址:https://www.jb51.net/softs/27286.html#downintro2 进行安装,安装类型选择“Typical”,其他默认,最后一步安装时间较长。
安装完成后在cmd中输入perl -v来查看版本号,以确认安装成功。
3、安装NASM
nasm-2.15.05下载地址:https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/
以管理员身份运行nasm-2.15.05-installer-x64.exe,进行默认安装即可。
并将NASM安装目录添加至Windows系统环境变量Path中。

开始进行编译工作

可参考GMSSL官网安装方式:http://gmssl.org/docs/install.html
由于版本问题,老版GmSSL-master\crypto\evp文件夹中的names2.c文件中的函数声明被删掉了,需要在文件末尾补充上。

static void cipher_name_len(const EVP_CIPHER *cipher, const char *from,const char *to, void *x)
{*((int *)x) += strlen(EVP_CIPHER_name(cipher));
}static void cipher_name(const EVP_CIPHER *cipher, const char *from,const char *to, void *x)
{strcat((char *)x, EVP_CIPHER_name(cipher));
}char *EVP_get_ciphernames(int aliases)
{char *ret = NULL;int len = 0;EVP_CIPHER_do_all_sorted(cipher_name_len, &len);ret = OPENSSL_zalloc(len);if (!ret) {return NULL;}EVP_CIPHER_do_all_sorted(cipher_name, ret);return ret;
}char *EVP_get_digestnames(int aliases)
{return "sm3:sha1:sha256";
}

这个是任何平台Windows/ linux都需要增加的一段代码,无脑添加即可,否则编译的时候会出现下面的错误。

若不慎忘记添加代码出现了这个错误,一定要记得执行 nmake clean命令清楚之前编译过的文件。

1、 使用合适的编译器

在开始菜单找到已经安装好的vs2019的文件夹,找到图示的几个编译器。
官网使用的是Developer,csdn上使用的是x64 Native,就很懵,不知道用哪个也不知道有什么不一样。我一开始用的是x64,后面讨论我出现的问题。
2、用管理员模式打开x64,命令行:
cd/d +GMSSL-master文件夹的位置
例:cd/d D:\网安\密码\gmssl\GmSSL-master

进入GMSSL源码目录
3、若想编译32位,perl Configure VC-WIN32;若想编译64位,则输入perl Configure VC-WIN64A

perl Configure VC-WIN32
perl Configure VC-WIN64A

(注意这里该大写的一定要大写,之前就因为不注意输入了vc-win64a一直报错……)

4、 nmake生成Makefile文件,该过程会持续一段时间。

nmake

5、 nmake test进行编译检测。

nmake test

6、 nmake install进行安装。

nmake install

默认安装到C:\Program Files (x86)\GmSSL,把文件中的bin文件夹添加至系统环境变量中去,就可以使用gmssl命令了。

最后如果安装成功,打开cmd输入gmssl version来查看当前版本。

报错

虐我千万遍的fatal error:

每次perl configure之后进行nmake的时候,总是出现这个fatal error,在网上百度谷歌之后,类似的fatal error U1077倒是见过了不少,就是没有我遇到的情况。我重新安装了以上所有软件,甚至把源码删掉重新在GitHub上面又下载了一遍之后都没有改善,依旧是fatal error。

问过老师之后知道GMssl在Windows系统上编译过程中非常可能在汇编的环节出现问题,fatal error所显示的问题确实也在所下载的NASM汇编软件上面。经过百度perl configure的具体作用之后,因为之前一直使用的是perl Configure VC-WIN64A,故想到是不是格式出现了错误,然后就nmake clean之后重新perl Configure VC-WIN32了一遍,nmake之后果然顺畅的编译中。但不一会儿就又出现了新的错误:
fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突。(或者x86、x64反过来)

虽然库的位数与电脑不匹配,但是至少消除了之前的fatal error U1077。我准备使用最笨的方法,上面画出的三种VC的编译器,在每一个编译器上面都执行一遍perl Configure VC-WIN64A和perl Configure VC-WIN32(每次执行失败之后都要记得nmake clean一次)。果然在官网所使用的Developer command中成功编译了Gmssl库。

中间也多多少少遇到了一些小问题,都可以通过百度解决,其他常见的报错可参见其他csdn或其他论坛上的讨论。

至此GMSSL的编译工作就算完成了。

如有错误,欢迎批评指正!

下一步工作

通过指导老师的讲解与相关资料的搜索,国密算法中的sm2和sm9算法是GMSSL的最核心的算法之二。小组分工过后,接下来我主要以针对基于身份验证的sm9算法为核心进行详细分析,同时包括对openssl不支持的一些国密算法以及新型的密码算法进行代码分析,学习SSL/TLS等相关密码协议,在分析代码的过程中体会开发者的GMSSL coding style以及中华人民共和国密码行业标准,在以后的编程过程中更加规范化的要求自己。

山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略相关推荐

  1. 山东大学软件工程应用与实践——GMSSL开源库(四)——SM9数字签名算法及验证的源代码分析

    2021SC@SDUSC 目录 一.引言 二.密钥的生成数字签名与签名验证相关代码 1.判定函数 2.签名的初始化函数 3.签名执行函数 4.真正的签名函数 5.签名验证初始化函数 6.签名验证执行函 ...

  2. 山东大学软件工程应用与实践——Pig代码综述

    2021SC@SDUSC 目录 一.Pig是什么? 二.Pig的特点 三.Pig安装部署 四.组内分工 一.Pig是什么? Pig 是Apache平台下的一个免费开源项目,是MapReduce的一个抽 ...

  3. 软件测试保姆级攻略(第一期 软件的结构组成和网络基础)

    目录 前言 一.软件的组成结构 1.1 软件的定义 1.2常见软件的表达形式(可执行程序,app,网页) 1.3应用程序的架构模式(C/S,B/S) 1.4 软件的组成 1.4.1前后端的交互模式(以 ...

  4. 山东大学软件工程应用与实践——GMSSL开源库(九)——SM9密钥封装与公钥加密的源代码分析

    2021SC@SDUSC 文章目录 int SM9_wrap_key(密钥的封装) int SM9_unwrap_key(密钥的解封) int SM9_encrypt(公钥加密算法) int SM9_ ...

  5. 山东大学软件工程应用与实践——GMSSL开源库(十)——重要的大整数

    2021SC@SDUSC 文章标题 BIGNUM的结构 大整数的加减法(绝对值加减) 绝对值加减 带符号加减 大整数的乘法 经典乘法 递归和comba乘法 小结 无论是SM2.SM9等国密算法还是以R ...

  6. 山东大学软件工程应用与实践——GMSSL开源库(二)——浅尝SM9

    2021SC@SDUSC 概述 为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家.RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Crypt ...

  7. <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)

    2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...

  8. <2021SC@SDUSC>博客(9)山东大学软件工程应用与实践Jpress代码分析(8)

    2021SC@SDUSC Lucene和ElasticSearch 在上一篇博客中提到的Elasticsearch是一个基于Lucene搜索引擎为核心构建的开源,分布式,RESTful搜索服务器.这里 ...

  9. 山东大学软件工程应用与实践——WeaselTSF(一)

    2021SC@SDUSC 文章目录 简单介绍 WeaselTSF.h 从本篇博客开始分析WeaselTFS这个包中的代码. 简单介绍 WeaselTSF.vcproj This is the main ...

最新文章

  1. 量子计算时代更近了,未来可解决大规模计算的科学难题
  2. 浅谈对腾讯云微信小程序解决方案服务端的理解(主要针对信道服务)
  3. 为了释放AI在边缘计算的力量 英特尔又出手了
  4. 华为 招聘 状态 查看_英特尔放弃5G芯片研发:三星受益;爱立信2019年Q1净利润约2.51亿美元;华为也将要与高通和解;天津首个5G电话成功打通...
  5. ajax解析json中的对象数组对象,在JQuery中检索json数组后获取json对象Ajax
  6. InfoPath: Passing Command Line parameters to a new form
  7. 杂志社的电子邮件地址
  8. [和秋叶一起学ppt]四步教你变身高富帅ppt(笔记)
  9. django慢学日常
  10. 202104-2 邻域均值
  11. 什么是客户关系管理CRM?
  12. 需求分析和数据分析那些事。
  13. 【uniapp】 读取手机通讯录权限
  14. Zuul网关的快速使用
  15. 酒仙网将上市:营销促营收增长,深陷纠纷案,部分股权被法院冻结
  16. openstreetmap-tile-server-ubuntu-16-04
  17. 全国 41611 个景点,用 Python 告诉你哪些地方最值得一游!
  18. CMake Error at D:/opencv/opencv-3.4.6/sources/cmake/OpenCVModule.cmake:36,,,OpenCV has already loade
  19. 如何引流购物粉?如何引流网购粉?怎么吸购物粉?
  20. 高德地图API——信息窗体InfoWindow

热门文章

  1. 22个免费的数据可视化和分析工具推荐
  2. python控制步进电机转动_用Python编程:控制步进电机+ Raspberry Pi零+ L293D IC
  3. 项目管理案例分析-小型旅游网站开发项目
  4. 我为什么要做个人网站——互联网乌托邦的理想
  5. 雷达距离分辨力的推导
  6. 重返母校怀抱,老同学聚会南京大学
  7. 程序员考公指南:逃离996的最强出路,拒绝秃顶的最佳方法
  8. 2021-06-26一文看尽深度学习中的20种卷积(附源码整理和论文解读)
  9. 如何下载MySQL各个版本
  10. JavaScript基础之函数与作用域(二)