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密码算法库的更多相关文章

  1. OpenSSL密码算法库: MD5示例小程序

    OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...

  2. liboqs-量子安全密码算法开源C库

    liboqs是一个用于量子安全密码算法的开源C库. 一,概述 liboqs提供: 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合: 这些算法的通用API: 测试工具和基准测试例程. l ...

  3. Android逆向之旅---Android中锁屏密码算法解析以及破解方案

    一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...

  4. Java实现7种常见密码算法

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 前面在密码学入门一文中讲解了各种常见的密码学概念.算法与运用场景,但没有介绍过代码,因此,为作补充,这一篇将会介绍 ...

  5. 信息安全-2:python之hill密码算法[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...

  6. 安装Python算法库

    安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...

  7. scikit-learn 支持向量机算法库使用小结

    之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...

  8. scikit-learn 线性回归算法库小结

    scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景. 线性回归的目的是要得到输 ...

  9. 算法库:Matlab与C++混合编程

    算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...

  10. 使用CPA4破解经典密码算法

    下面是一段经过经典密码算法加密的密文(加密算法未知): yvvnerujjvnywhbdvkpchfgvjtzwqsuporqfzpoekkjgziicdwwkeejdsruef   whwseyej ...

随机推荐

  1. jQuery事件与动态效果

    目录 一:阻止后续事件执行 1.推荐使用阻止事件 2.未使用 阻止后续事件执行 3.使用阻止后续事件执行 二:阻止事件冒泡 1.什么是事件冒泡? 2.未阻止事件冒泡 3.阻止事件冒泡 4.2.阻止冒泡 ...

  2. Effective C++试读笔记

    Part1 习惯C++ 1. 视C++为一个语言联邦 C++非常的屌,除了开发效率和编译效率不高,其他的都非常屌 C++ 可以视为一系列的语言联邦构成的紧密结合体,分为以下四个部分 C 2.C wit ...

  3. 3、mysql着重号解决关键字冲突

    1.着重号(`  `): 使用着重号(` `)将字段名或表名括起来解决冲突:保证表中的字段.表名等没有和保留字.数据库系统名或常用方法名冲突

  4. CH579(Cortex-M0)网络IAP升级介绍及问题解答--(持续更新) 网络升级

    CH579网络IAP升级的源码可以从码云(Gitee)上git clone下来. 码云地址:https://gitee.com/maji19971221/wch-ch57x 以下是一个朋友问的几个常见 ...

  5. kali之pip和pip3安装

    安装pip 首先安装setuptools,setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它 是一组Python的 distutil ...

  6. c语言学习总结(原创)

    什么是标识符? 标识符是用来标识变量.函数.类.模块,或者任何其他用户自定义项目的名称,用它来命名程序正文中的一些实体,比如函数名.变量名.类名.对象名等.如:int a1=0; const b1=& ...

  7. 控制台运行java

    控制台执行java 新建java代码 新建一个记事本文件,将文件名改为HelloWorld.java,注意:后缀是.java. 若没有显示文件后缀,可以在资源管理器打开显示后缀,然后再次修改文件名,一 ...

  8. 传播问卷调查数据不够?自己生成假数据!Python编程一对一教学

    问卷调查 Excel 样式 原文件下载 生成代码 序号 直接 range 生成即可. 提交答卷时间 import time time_str = time.strftime('%Y/%m/%d %H: ...

  9. DNS欺骗:网站克隆实现网站钓鱼攻击

    1 DNS 1.1 DNS是什么? 域名系统(Domain Name System)是互联网使用的命名系统,用来将主机域名转换为 ip 地址,属于应用层协议,使用 UDP 传输. 1.2 为什么需要D ...

  10. A+B Problem C++

    前言继上次发表的A+B Problem C语言后,今天我们来学习一下A+B Problem C++ 正文什么是C++? C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象 ...