ch03 密码技术-03-密码杂凑算法-SM3三种方式实践

前言

1、笔记链接

密码技术密码杂凑算法学习笔记

2、相关代码

前置:

前置

一段式:

一段式

三段式:

三段式

HMAC:

HMAC

3、过程图

SM3-一段式

sm1

SM3-三段式

sm3

HMAC-sm3

hmac

4、声明

下面的代码基于DeepSeek识图,注释基于DeepSeek补充,不一定完全正确,但可供参考一下。

SM3 哈希算法与 HMAC-SM3

前置步骤

# 第1步:克隆代码仓库(只需要执行一次)
git clone https://gitee.com/rocedu/bestidiocs4stu.git

# 第2步:进入项目目录(每次上课都需要执行)
cd bestidiocs4stu

# 第3步:拉取最新代码(每次上课都需要执行)
git pull

步骤一:基础 SM3 哈希算法测试

1. 进入实验目录

# 进入第三章目录
cd ch03
# 查看目录内容
ls
# 输出:sm2 sm3 sm4 testcaesar.c vpn

# 进入sm3实验目录
cd sm3
# 查看sm3目录内容
ls
# 输出:hmac-sm3 sm31.c sm33.c sm3gmssl sm3openssl

2. 编译和运行 SM3 基础实现

# 编译sm31.c文件,生成可执行文件test
gcc sm31.c -o test

# 查看生成的文件
ls
# 输出中应该包含:test

# 运行SM3哈希测试程序
./test
# 输出结果:
# 消息:abc
# Hash结果:
# len=32
# 66 c7 f0 f4 62 ee ed d9 d1 f2 d4 6b dc 10 e4 e2
# 41 67 c4 87 5c f2 f7 a2 29 7d a0 2b 8f 4b a8 e0

3. 使用 OpenSSL 验证结果

# 使用openssl计算相同消息的SM3哈希值进行验证
echo -n "abc" | openssl sm3
# 输出:SM3(stdin)= 66c7f0f462eeedd9df2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
# 与前面./test结果对比,相同

注意:如果系统未安装 OpenSSL,使用以下命令安装:

# 安装openssl工具
sudo apt-get update
sudo apt-get install openssl

步骤二:SM3 其他实现测试

1. 编译和运行 SM33 实现

# 编译sm33.c文件,生成可执行文件testsm33
gcc sm33.c -o testsm33

# 查看生成的文件
ls
# 输出中应该包含:testsm33

# 运行SM33哈希测试程序
./testsm33
# 输出结果:
# 消息:abcd
# Hash结果:
# 82ec580fed36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e

2. 使用 OpenSSL 验证结果

# 使用openssl计算相同消息的SM3哈希值进行验证
echo -n "abcd" | openssl sm3
# 输出:SM3(stdin)= 82ec580fed36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e
# 与前面./testsm33结果对比,相同

步骤三:HMAC-SM3 测试

1. 进入 HMAC-SM3 目录

# 进入hmac-sm3子目录
cd hmac-sm3

# 查看目录内容
ls
# 输出:Makefile sm3.c sm3.h test.c

# 修改test.c中main函数常量为自己名字简称,下图红框示例为“lsh”,例如我修改为“wyh”,一些修改test.c的代码如下
# vim test.c进入test.c文件
# i进入编辑模式
# Esc退出编辑模式
# :wq保存并退出
# :q!不保存退出

示例

2. 编译 HMAC-SM3 程序

# 失败样例:第一次尝试编译
gcc test.c -o test
# 错误信息:undefined reference to `sm3_hmac'
# 这是因为没有链接sm3.c文件

# 正确编译方法:同时编译test.c和sm3.c
gcc test.c sm3.c -o test

# 查看生成的文件
ls
# 输出中应该包含:test

3. 运行 HMAC-SM3 测试

# 运行HMAC-SM3测试程序
./test
# 输出结果:
# Message: wyh
# HMAC: 4c7589b2 4e163b81 7633875e 73e0265e 6fe89baf 5c460c1c e4661c5f d4326d2c

4. 使用 OpenSSL 验证 HMAC 结果

# 使用openssl验证HMAC-SM3结果,下面的“wyh”改为你的名字简称,和前面test.c中的修改一样
echo -n "wyh" | openssl dgst -sm3 -hmac "123456"
# 输出:SM3(stdin)= 4c7589b24e163b817633875e73e0265e6fe89baf5c460c1ce4661c5fd4326d2c
# 与前面./test结果对比,相同

常见问题解决

1. 编译工具未安装

如果 gcc 命令未找到,需要安装编译工具:

# 安装gcc编译器
sudo apt-get update
sudo apt-get install gcc

2. 权限问题

如果遇到权限问题,可以给执行文件添加权限:

# 给test文件添加执行权限
chmod +x test

3. 头文件缺失

如果编译时提示头文件缺失,可能需要安装开发库:

# 安装常用的开发库
sudo apt-get install build-essential
posted @ 2025-10-01 22:53  20231420  阅读(25)  评论(0)    收藏  举报