gmlib密码算法库
gmlib密码算法库
一、gmlib密码算法库简介
支持国密 SM4/AES-ECB/CBC/GCM,SM3,SM2签名/加密,ZUC算法 的密码库,文档页面GMLib Docs ,项目地址 gmlib,开发这个库的时候参考了很多密码库,例如 Crypto++,openssl,GmSSL,Oryx Embedded 以及 JAVA JDK,所以很多地方都能看到这些库的影子
参考链接:https://oldprincess.github.io/gmlib/
二、gmlib安装
1 工具包下载
https://github.com/oldprincess/gmlib
或者通过克隆方式
git clone https://github.com/oldprincess/gmlib.git
2 安装
cd gmlib-master
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release # 执行cmake,以Release模式进行编译
cmake --build .
若编译成功,则应该在build目录下生成结果文件,在其下的bin和lib目录为生成的测试文件与lib文件
在控制台中执行 bin 目录下编译出的测试文件gmlib-test
应当可在控制台中看到输出 test finish!,说明测试结果正确
三、代码测试
1 实现sm2加密解密
修改gmlib文件夹下的CMakeLists.txt文件,在文末加上
add_executable(gmlib-sm2_crypt
demo/demo_sm2_crypt.c
)
target_link_libraries(gmlib-sm2_crypt gmlib)
创建新工程文件夹sm2_crypt供给sm2加密解密单独使用
在新文件夹中执行命令
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
运行结束后执行make指令
在bin目录下找到gmlib-sm2_crypt可执行文件,运行./gmlib-sm2_crypt
命令
2 实现sm2签名验签
修改CMakeLists.txt文件,末尾替换刚刚添加的代码,内容如下
add_executable(gmlib-sm2_sign
demo/demo_sm2_sign.c
)
target_link_libraries(gmlib-sm2_sign gmlib)
创建文件夹命名为sm2_sign,在目录下执行编译命令
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
进入到bin文件夹./gmlib-sm2_sign
3 实现sm3加密
方法相同,首先修改CMakeLists.txt文件
add_executable(gmlib-sm3
demo/demo_sm3.c
)
target_link_libraries(gmlib-sm3 gmlib)
运行命令
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
运行加密结果:
4 实现sm4加密
首先修改CMakeLists.txt文件
add_executable(gmlib-sm4
demo/demo_sm4.c
)
target_link_libraries(gmlib-sm4 gmlib)
运行命令
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
运行加密结果:
四、问题与反思
gmlib库算是一个比较经典的密码算法库了,调试的过程中也结合了cmake的使用,这与我之前调试gmssl 3.0库的时候使用的方法一样,本次库不是我在本组中最先实现的,但也通过学习掌握了其使用方法。
gmlib密码算法库的更多相关文章
- OpenSSL密码算法库: MD5示例小程序
OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...
- liboqs-量子安全密码算法开源C库
liboqs是一个用于量子安全密码算法的开源C库. 一,概述 liboqs提供: 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合: 这些算法的通用API: 测试工具和基准测试例程. l ...
- Android逆向之旅---Android中锁屏密码算法解析以及破解方案
一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...
- Java实现7种常见密码算法
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 前面在密码学入门一文中讲解了各种常见的密码学概念.算法与运用场景,但没有介绍过代码,因此,为作补充,这一篇将会介绍 ...
- 信息安全-2:python之hill密码算法[原创]
转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- scikit-learn 支持向量机算法库使用小结
之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...
- scikit-learn 线性回归算法库小结
scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景. 线性回归的目的是要得到输 ...
- 算法库:Matlab与C++混合编程
算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...
- 使用CPA4破解经典密码算法
下面是一段经过经典密码算法加密的密文(加密算法未知): yvvnerujjvnywhbdvkpchfgvjtzwqsuporqfzpoekkjgziicdwwkeejdsruef whwseyej ...
随机推荐
- jQuery事件与动态效果
目录 一:阻止后续事件执行 1.推荐使用阻止事件 2.未使用 阻止后续事件执行 3.使用阻止后续事件执行 二:阻止事件冒泡 1.什么是事件冒泡? 2.未阻止事件冒泡 3.阻止事件冒泡 4.2.阻止冒泡 ...
- Effective C++试读笔记
Part1 习惯C++ 1. 视C++为一个语言联邦 C++非常的屌,除了开发效率和编译效率不高,其他的都非常屌 C++ 可以视为一系列的语言联邦构成的紧密结合体,分为以下四个部分 C 2.C wit ...
- 3、mysql着重号解决关键字冲突
1.着重号(` `): 使用着重号(` `)将字段名或表名括起来解决冲突:保证表中的字段.表名等没有和保留字.数据库系统名或常用方法名冲突
- CH579(Cortex-M0)网络IAP升级介绍及问题解答--(持续更新) 网络升级
CH579网络IAP升级的源码可以从码云(Gitee)上git clone下来. 码云地址:https://gitee.com/maji19971221/wch-ch57x 以下是一个朋友问的几个常见 ...
- kali之pip和pip3安装
安装pip 首先安装setuptools,setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它 是一组Python的 distutil ...
- c语言学习总结(原创)
什么是标识符? 标识符是用来标识变量.函数.类.模块,或者任何其他用户自定义项目的名称,用它来命名程序正文中的一些实体,比如函数名.变量名.类名.对象名等.如:int a1=0; const b1=& ...
- 控制台运行java
控制台执行java 新建java代码 新建一个记事本文件,将文件名改为HelloWorld.java,注意:后缀是.java. 若没有显示文件后缀,可以在资源管理器打开显示后缀,然后再次修改文件名,一 ...
- 传播问卷调查数据不够?自己生成假数据!Python编程一对一教学
问卷调查 Excel 样式 原文件下载 生成代码 序号 直接 range 生成即可. 提交答卷时间 import time time_str = time.strftime('%Y/%m/%d %H: ...
- DNS欺骗:网站克隆实现网站钓鱼攻击
1 DNS 1.1 DNS是什么? 域名系统(Domain Name System)是互联网使用的命名系统,用来将主机域名转换为 ip 地址,属于应用层协议,使用 UDP 传输. 1.2 为什么需要D ...
- A+B Problem C++
前言继上次发表的A+B Problem C语言后,今天我们来学习一下A+B Problem C++ 正文什么是C++? C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象 ...