GMSSL之ZUC256算法

GmSSL介绍

GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法。

从   GmSSL  官网处得到的下载链接为  GitHub - guanzhi/GmSSL: 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱

GmSSL的下载编译如下:

# git clone https://github.com/guanzhi/GmSSL.git
# cd GmSSL
# mkdir build
# cd build/
# cmake ..
# make
# ls bin/
aeadtest          demo_sm2_encrypt            demo_sm2_sign_ctx            demo_sm4_cbc_encrypt_update  demo_sm9_sign  hash_drbgtest    libsdf_dummy.so      pemtest     sm3test       x509_exttest
aestest           demo_sm2_keygen             demo_sm3                     demo_sm4_cbc_padding         demo_zuc       hextest          libsdf_dummy.so.3    pkcs8test   sm4test       x509_oidtest
asn1test          demo_sm2_keyparse           demo_sm3_hmac                demo_sm4_ctr                 digesttest     hkdftest         libsdf_dummy.so.3.1  sha224test  sm9test       x509_reqtest
base64test        demo_sm2_private_key        demo_sm3_kdf                 demo_sm4_ctr_encrypt_update  ectest         hmactest         libskf_dummy.so      sha256test  tls13test     x509_strtest
block_ciphertest  demo_sm2_private_key_parse  demo_sm4                     demo_sm4_gcm                 gcmtest        libgmssl.so      libskf_dummy.so.3    sha384test  tlstest       x509test
chacha20test      demo_sm2_public_key         demo_sm4_cbc                 demo_sm9_encrypt             gf128test      libgmssl.so.3    libskf_dummy.so.3.1  sha512test  x509_algtest  zuctest
cmstest           demo_sm2_sign               demo_sm4_cbc_decrypt_update  demo_sm9_keygen              gmssl          libgmssl.so.3.1  pbkdf2test           sm2test     x509_crltest

在编译过程中会遇到报错,为小错误,请自行修改

/home/GMSSL/GmSSL/src/sm9_alg.c: In function ‘sm9_fn_from_hash’:
/home/GMSSL/GmSSL/src/sm9_alg.c:2318:11: error: redeclaration of ‘i’ with no linkagefor (int i = 0; i < 10; i++) {^
/home/GMSSL/GmSSL/src/sm9_alg.c:2315:6: note: previous declaration of ‘i’ was hereint i, j;^
/home/GMSSL/GmSSL/src/sm9_alg.c:2318:2: error: ‘for’ loop initial declarations are only allowed in C99 modefor (int i = 0; i < 10; i++) {^
/home/GMSSL/GmSSL/src/sm9_alg.c:2318:2: note: use option -std=c99 or -std=gnu99 to compile your code
/home/GMSSL/GmSSL/src/sm9_alg.c:2319:3: error: ‘for’ loop initial declarations are only allowed in C99 modefor (int j = 0; j < 4; j++) {^

ZUC算法介绍

ZUC算法是一个面向字的流加密算法。算法介绍可见 ZUC-256 流密码算法

根据include/gmssl/zuc.h头文件里提供的算法接口,主要的算法接口有算法初始化,产生密钥流,加密。计算校验值等。其中ZUC根据塞入的key和iv,产生密钥流,算法加密即是将密钥流与明文进行异或操作得到密文,解密即是将密钥流与密文进行异或操作得到明文。接口分为zuc 128位算法与zuc 256位算法,即塞入的key与iv长度差异。

ZUC256算法实例

工程目录:

# ls
libgmssl.so  libgmssl.so.3  Makefile  test.c  zuc.h

其中库和头文件是从上述编译好的GmSSL里拿出来的。

test.c

#include <stdio.h>
#include <string.h>#include "zuc.h"void dump_buf(char *info, uint8_t *buf, uint32_t len)
{int i;printf("%s[%d]", info, len);for (i = 0; i < len; i++) {printf("%s%02X%s", i % 16 == 0 ? "\n     ":" ",buf[i], i == len - 1 ? "\n":"");}
}int main()
{int ret;uint8_t key[32], iv[32];uint32_t out[32];uint8_t mac_out[4];uint8_t msg[32];ZUC256_STATE state;ZUC256_MAC_CTX ctx;/* stream */memset(&state, 0x0, sizeof(ZUC256_STATE));memset(key, 0x0, 32);memset(iv, 0x0, 32);memset(msg, 0xFF, 32);zuc256_init(&state, key, iv);zuc256_generate_keystream(&state, 32, out);dump_buf("keystream out:", out, 32*4);/* MAC */memset(&ctx, 0x0, sizeof(ZUC256_MAC_CTX));memset(key, 0x0, 32);memset(iv, 0x0, 32);memset(msg, 0xFF, 32);zuc256_mac_init(&ctx, key, iv, ZUC256_MAC32_SIZE*8);zuc256_mac_update(&ctx, msg, 32);zuc256_mac_finish(&ctx, NULL, 0, mac_out);dump_buf("mac32 out:", mac_out, 4);return 0;
}

Makefile

test:gcc -g test.c -I. -L. -lgmssl -o test
clean:rm -rf test

编译并测试

# make
gcc -g test.c -I. -L. -lgmssl -o test
test.c: In function ‘main’:
test.c:37:5: warning: passing argument 2 of ‘dump_buf’ from incompatible pointer type [enabled by default]dump_buf("keystream out:", out, 32*4);^
test.c:6:6: note: expected ‘uint8_t *’ but argument is of type ‘uint32_t *’void dump_buf(char *info, uint8_t *buf, uint32_t len)^
# ./test
keystream out:[128]D6 3A D0 58 E2 2C 03 2E 3A 68 FC DA 03 CB BD 3967 BC A2 52 74 DE B7 F1 A1 E3 3C 16 58 55 EF 015B D7 39 96 1B 68 FA 95 F7 0D 09 7F CC 1C 39 5612 76 3B 90 4C 54 4D 74 AD 3F BC 17 08 3B 16 8B0B 7C 78 21 B8 5B 77 97 BB C6 43 49 FD 8A AD E8B1 B2 FC 7D AB C9 CB 2B 2E FD 1B F4 FF 10 C8 16DE 11 AB 8F 67 6C A6 76 DE 7C 50 45 E0 4B F0 2162 75 FD 63 4E 84 80 62 5C 9E 8D D8 D9 8C 04 10
mac32 out:[4]88 0D 51 7C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城【成神路】-【4】——分类维护

目录 1.删除功能的实现 2.新增功能的实现 3.修改功能的实现 4.拖拽功能 1.删除功能的实现 1.1逻辑删除 逻辑删除&#xff1a;不删除数据库中真实的数据&#xff0c;用指定字段&#xff0c;显示的表示是否删除 1.在application.yml中加入配置 mybatis-plus:global-config:…

【PostgreSQL内核学习(二十五) —— (DBMS存储空间管理)】

DBMS存储空间管理 概述块&#xff08;或页面&#xff09;PageHeaderData 结构体HeapTupleHeaderData 结构 表空间表空间的作用&#xff1a;表空间和数据库关系表空间执行案例 补充 —— 模式&#xff08;Schema&#xff09; 声明&#xff1a;本文的部分内容参考了他人的文章。在…

【HarmonyOS】鸿蒙开发之自定义组件——第3.7章

自定义构建函数 (适合内部页面的封装&#xff0c;更加合适)(构建页面) 案例: 自定义组件文件 Index.ets //全局自定义构建函数写法 Builder function item1(){Row({space:10}){Text("我是自定义构建函数")} }Component export struct Index{build(){Column(){item…

【红包封面发放+微信红包封面制作教程】小黑猫祝大家小年快乐~

今年终于成功获得了微信红包封面~是我们家的小黑猫&#xff0c;嘿嘿。 封面获取方式 一共还有600份&#xff0c;数量有限&#xff0c;大家想要的话请关注文末的公众号&#xff0c;访问红包封面相关的推文获取~ 平时公众号主要发布一些技术类工具知识&#xff0c;希望能帮到大…

Vue2+ElementUI 弹窗全局拖拽 支持放大缩小

拖拽组件 dialogDrag.vue <template><div></div> </template> <script>export default {name: dialogDrag,data() {return {originalWidth: null,originalHeight: null}},created() {this.$nextTick(()>{this.dialogDrag()})},mounted() {}…

cesium-场景出图场景截屏导出图片或pdf

cesium把当前的场景截图&#xff0c;下载图片或pdf 安装 npm install canvas2image --save npm i jspdf -S 如果安装的插件Canvas2Image不好用&#xff0c;可自建js Canvas2Image.js /*** covert canvas to image* and save the image file*/ const Canvas2Image (function…

Linux下的线程操作

一、多线程的创建于退出 1. pthread_create(线程的创建) pthread_create 是 POSIX 线程库中的函数&#xff0c;用于创建一个新的线程。 函数原型如下&#xff1a; int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void…

无人机激光雷达标定板

机载激光雷达标定板是用于校准和验证机载激光雷达系统的设备。由于机载激光雷达系统在测量地形、建筑物和植被等方面具有广泛的应用&#xff0c;因此标定板的使用对于确保测量结果的准确性和可靠性至关重要。 标定板通常由高反射率的材料制成&#xff0c;如镀金的玻璃或陶瓷&am…

计算机网络实验五

目录 实验五 路由器基本配置 1、实验目的 2、实验设备 3、网络拓扑及IP地址分配 4、实验过程 &#xff08;1&#xff09;路由器设备名称的配置 &#xff08;2&#xff09;路由器每日提示信息配置 &#xff08;3&#xff09;路由器端口的IP地址配置 &#xff08;4&…

目标检测YOLO实战应用案例100讲-【目标检测】Halcon(工具应用篇)

目录 Image、Regiong、XLD相关知识 一 读取的3种方式: 二 图像变量Region 三 图型变量

Docker 阿里云镜像仓库CR使用实践

一、使用容器镜像&#xff0c;查看镜像&#xff0c;创建&#xff0c;推送&#xff0c;拉取阿里云镜像 CR镜像管理&#xff08;阿里云容器镜像服务&#xff08;Container Registry&#xff09;&#xff09; 登录实例 未创建的镜像名称也可以push、docker的私有仓库需要提起创建…

微信小程序新手入门教程二:认识JSON配置文件

在上一篇我们介绍了微信小程序的注册和基本使用方式&#xff0c;并且写出了一个简单的页面&#xff0c;但是依然没有解释目录中的各种.json文件是做什么的。这篇我们就来认识一下各种JSON配置文件及其配置项。 一 认识JSON 首先先来认识一下JSON是什么。 JSON 指的是 JavaScri…

航道大数据应用专项研究报告(附下载)

总体目标 充分认识航道大数据对行业治理的重要性和必要性&#xff0c;航道大数据的开发和利用是建设智慧航道的基础。基于大数据的航道管理体系&#xff0c;实现了现有数据的梳理和汇聚&#xff0c;跨部门数据的交换和整合&#xff0c;建立了数据关联和深度学习的模型机制&…

网络异常案例六_IP冲突

问题现象 同一个局域网下&#xff0c;一个路由器带几十台终端设备&#xff0c;存在终端设备获取到了相同IP的场景。该路由器也是DHCP Server。 有两个设备终端&#xff0c;都显示获取到了192.168.11.177这个ip。 抓包分析 抓包过程中&#xff0c;看到的一些问题。 ps&#x…

​(三)hadoop之hive的搭建1

下载 访问官方网站https://hive.apache.org/ 点击downloads 点击Download a release now! 点击https://dlcdn.apache.org/hive/ 选择最新的稳定版 复制最新的url 在linux执行下载命令 wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 2.解压…

第十一篇【传奇开心果系列】Python的OpenCV技术点案例示例:三维重建

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例系列 短博文目录一、前言二、OpenCV三维重建介绍三、基于区域的SGBM示例代码四、BM&#xff08;Block Matching&#xff09;算法介绍和示例代码五、基于能量最小化的GC&#xff08;Graph Cut&#xff09;算法介…

从编程中理解:大脑的动态更新与信息处理

在深入探讨大脑动态更新与信息处理的过程中,我们可以结合编程语言C#的逻辑来构建一个以金庸武侠世界为背景的故事。设想张无忌在《倚天屠龙记》中学习和掌握九阳真经的过程,我们可以将其类比为一种内存管理和知识积累系统。以下是一个简化版但富含叙事元素的Unity C#脚本示例…

【云计算】Openstack配置Redis服务—一主二从三哨兵模式

Redis一主二从三哨兵模式 hostnamectl set-hostname //修改主机名将提供的Redis安装文件下载redis-3.2.12.tar.gz到三台虚拟机中&#xff0c;解压到/opt目录中&#xff0c;并配置yum源使用本地目录&#xff0c;命令如下&#xff08;三台虚拟机操作一致&#xff0c;以redis1主…

linux 组建和卸载raid1、raid0详细操作

组raid的最好是相同容量和型号的硬盘&#xff0c;否则会有木桶效应 linux下组raid有很多细节 一、安装raid软件 deb包 apt-get install mdadm或dnf包 dnf install mdadm二、组raid1-镜像&#xff0c;组raid0-并列 raid1和raid0只有在madam命令时一点点不同&#xff0c;其他…

智慧商城项目(ing)

项目概述 1.创建项目 目标&#xff1a;基于VueCli自定义创建项目架子&#xff0c;将目录调整成符合企业规范的目录 删除多余的文件 修改路由配置 和App.vue 新增两个目录 api/utils ①api接口模块:发送ajax请求的接口模块 ②utils工具模块:自己封装的一些工具方法模块 2…