当前位置: 首页 > news >正文

sdf 测试-2-openssl

任务详情

在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容 和AI要给出详细过程,否则不得分。
0. 根据gmt0018标准,如何调用接口实现基于SM3求你的学号姓名的SM3值?(5‘)

  1. 使用OpenSSL实现SDF接口中的hash运算接口,至少支持SM3算法,把相关函数集成到src中的sdf.c中中(5’)
  2. 在test中的main.c调用进行测试,至少测试计算你的学号(数字),你的学号(字符串)的SM3值。(5‘)
  3. 提交代码(或代码链接)和运行结果截图

根据gmt0018标准,如何调用接口实现基于SM3求你的学号姓名的SM3值?(5‘)

#include "sdf.h"
#include <string.h>#define BUFFER_SIZE 1024int main() {int rv;unsigned char buffer[BUFFER_SIZE];unsigned int bufferLen;unsigned char hash[32]; // SM3哈希结果为32字节// 计算学号和姓名的SM3哈希值char *id = "20211119";char *name = "陈俊积";bufferLen = strlen(id) + strlen(name);memcpy(buffer, id, strlen(id));memcpy(buffer + strlen(id), name, strlen(name));rv = SDF_Hash(NULL,   // hSessionHandle: 会话句柄,可以为空buffer,bufferLen,hash);if (rv != SDR_OK) {printf("Failed to calculate SM3 hash: %d\n", rv);return -1;}printf("SM3 hash for %s%s: ", id, name);for (int i = 0; i < 32; i++) {printf("%02X", hash[i]);}printf("\n");return 0;
}

使用OpenSSL实现SDF接口中的hash运算接口,至少支持SM3算法,把相关函数集成到src中的sdf.c中中(5’)

为了支持SM3算法,我们可以使用 OpenSSL 库中的 EVP_Digest 函数来计算哈希值。下面是修改后的 SDF_Hash 函数的实现:

int SDF_Hash(void *hSessionHandle,unsigned char *pucData,unsigned int uiDataLength,unsigned char *pucHash)
{if (pucData == NULL || uiDataLength == 0 || pucHash == NULL) {return SDR_INVALID_PARAMETER;}const EVP_MD *md;EVP_MD_CTX *mdctx;md = EVP_sm3();mdctx = EVP_MD_CTX_new();EVP_DigestInit_ex(mdctx, md, NULL);EVP_DigestUpdate(mdctx, pucData, uiDataLength);EVP_DigestFinal_ex(mdctx, pucHash, NULL);EVP_MD_CTX_free(mdctx);return SDR_OK;
}

在上面的代码中,我们使用 OpenSSL 库中的 EVP_Digest 函数计算了哈希值,并将结果存储在 pucHash 缓冲区中。需要注意的是,在使用 EVP_Digest 函数之前,我们需要先初始化 EVP_MD_CTX 结构体,并指定要使用的哈希算法(这里使用 EVP_sm3() 函数)。然后,我们通过 EVP_DigestUpdate 函数传递要计算哈希值的数据,最后通过 EVP_DigestFinal_ex 函数获取哈希结果。

需要将修改后的代码集成到 sdf.c 文件中,如下所示:

#include "sdf.h"
#include <string.h>
#include <openssl/evp.h>int SDF_Hash(void *hSessionHandle,unsigned char *pucData,unsigned int uiDataLength,unsigned char *pucHash)
{if (pucData == NULL || uiDataLength == 0 || pucHash == NULL) {return SDR_INVALID_PARAMETER;}const EVP_MD *md;EVP_MD_CTX *mdctx;md = EVP_sm3();mdctx = EVP_MD_CTX_new();EVP_DigestInit_ex(mdctx, md, NULL);EVP_DigestUpdate(mdctx, pucData, uiDataLength);EVP_DigestFinal_ex(mdctx, pucHash, NULL);EVP_MD_CTX_free(mdctx);return SDR_OK;
}

在test中的main.c调用进行测试,至少测试计算你的学号(数字),你的学号(字符串)的SM3值。(5‘)

#include "sdf.h"
#include <stdio.h>#define BUFFER_SIZE 1024int main() {int rv;unsigned char buffer[BUFFER_SIZE];unsigned char hash[32]; // SM3哈希结果为32字节// 计算学号(数字)的SM3哈希值unsigned int id = 20211128;rv = SDF_Hash(NULL,   // hSessionHandle: 会话句柄,可以为空(unsigned char *)&id,sizeof(id),hash);if (rv != SDR_OK) {printf("Failed to calculate SM3 hash: %d\n", rv);return -1;}printf("SM3 hash for student ID (%u): ", id);for (int i = 0; i < 32; i++) {printf("%02X", hash[i]);}printf("\n");// 计算学号(字符串)的SM3哈希值char *idStr = "20211128";rv = SDF_Hash(NULL,   // hSessionHandle: 会话句柄,可以为空(unsigned char *)idStr,strlen(idStr),hash);if (rv != SDR_OK) {printf("Failed to calculate SM3 hash: %d\n", rv);return -1;}printf("SM3 hash for student ID (string): ");for (int i = 0; i < 32; i++) {printf("%02X", hash[i]);}printf("\n");return 0;
}

提交代码(或代码链接)和运行结果截图

sdf.c

#include "sdf.h"
#include <string.h>
#include <openssl/evp.h>int SDF_Hash(void *hSessionHandle,unsigned char *pucData,unsigned int uiDataLength,unsigned char *pucHash)
{if (pucData == NULL || uiDataLength == 0 || pucHash == NULL) {return SDR_INVALID_PARAMETER;}const EVP_MD *md;EVP_MD_CTX *mdctx;md = EVP_sm3();mdctx = EVP_MD_CTX_new();EVP_DigestInit_ex(mdctx, md, NULL);EVP_DigestUpdate(mdctx, pucData, uiDataLength);EVP_DigestFinal_ex(mdctx, pucHash, NULL);EVP_MD_CTX_free(mdctx);return SDR_OK;
}

main.c

#include "sdf.h"
#include <stdio.h>#define BUFFER_SIZE 1024int main() {int rv;unsigned char buffer[BUFFER_SIZE];unsigned char hash[32]; // SM3哈希结果为32字节// 计算学号(数字)的SM3哈希值unsigned int id = 20211128;rv = SDF_Hash(NULL,   // hSessionHandle: 会话句柄,可以为空(unsigned char *)&id,sizeof(id),hash);if (rv != SDR_OK) {printf("Failed to calculate SM3 hash: %d\n", rv);return -1;}printf("SM3 hash for student ID (%u): ", id);for (int i = 0; i < 32; i++) {printf("%02X", hash[i]);}printf("\n");// 计算学号(字符串)的SM3哈希值char *idStr = "20211128";rv = SDF_Hash(NULL,   // hSessionHandle: 会话句柄,可以为空(unsigned char *)idStr,strlen(idStr),hash);if (rv != SDR_OK) {printf("Failed to calculate SM3 hash: %d\n", rv);return -1;}printf("SM3 hash for student ID (string): ");for (int i = 0; i < 32; i++) {printf("%02X", hash[i]);}printf("\n");return 0;
}

相关文章:

sdf 测试-2-openssl

任务详情 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容 和AI要给出详细过程&#xff0c;否则不得分。 0. 根据gmt0018标准&#xff0c;如何调用接口实现基于SM3求你的学号姓名的SM3值&#xff1f;&#xff08;5‘&#xff09; 使用OpenSSL实现SDF接…...

头歌springboot初体验

您好&#xff01;看起来您可能在询问关于Spring Boot的入门体验。Spring Boot是一个开源的Java框架&#xff0c;它设计用来简化Spring应用程序的初始搭建和开发过程。以下是一些Spring Boot的基本概念和入门步骤&#xff1a; Spring Boot简介&#xff1a; Spring Boot是Spring框…...

矩阵对角化在机器学习中的奥秘与应用

在机器学习的广阔领域中&#xff0c;矩阵对角化作为一种重要的数学工具&#xff0c;扮演着不可或缺的角色。从基础的线性代数理论到复杂的机器学习算法&#xff0c;矩阵对角化都在其中发挥着重要的作用。 矩阵对角化的概念与原理 矩阵对角化是矩阵理论中的一个基本概念&#x…...

操作MySQL数据库

【一】针对库的增删查改&#xff08;文件夹&#xff09; 【1】创建数据库 &#xff08;1&#xff09;语法 创建一个存储数据表的文件夹。 注意&#xff1a;mysql中的编码字符集中utf-8&#xff0c;要换成utf8mb4。SQL语句中的中括号部分表示可选。 create database [if no…...

Linux shell 文件生成文件脚本(模拟生成文件、生成大量文件)

文章目录 Linux shell 文件生成文件脚本 Linux shell 文件生成文件脚本 TARGET_DIR&#xff1a;生成文件路径 NUM_FILES&#xff1a;生成文件数量 FILE_SIZE&#xff1a;生成文件大小&#xff08;KB&#xff09; #!/bin/bashset -e set -u# Directory where files will be cr…...

theharvester一键收集域名信息(KALI工具系列十)

目录 1、KALI LINUX简介 2、theharvester工具简介 3、在KALI中使用theharvester 3.1 用搜索引擎扫描 3.2 扫描并输出结果 3.3 扫描某域名下的所有账号 3.4 使用所有的搜索引擎扫描 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&…...

「动态规划」删除并获得点数

力扣原题链接&#xff0c;点击跳转。 给你一个整数数组nums。每次操作&#xff0c;可以删除任意一个值n&#xff0c;接着获得点数n&#xff0c;并同时删除所有的n-1和n1。你最多能获取多少点数&#xff1f; 这个问题的解法相当巧妙。我们可以把问题先转化一下。用类似计数排序…...

MongoDB CRUD操作:内嵌文档数组查询

MongoDB 内嵌文档数组查询 文章目录 MongoDB 内嵌文档数组查询查询数组内嵌文档为文档数组中的字段指定查询条件指定文档数组内嵌文档字段的查询条件使用数组索引查询内嵌文档的字段 为文档数组指定多个条件单个内嵌文档满足内嵌字段的多个查询条件符合标准的元素组合 使用 Mon…...

【C++】每日一题 50 Pow(x,n)

实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;x^n &#xff09;。 当需要计算x的n次幂时&#xff0c;可以使用递归或者迭代的方式来实现。 #include <iostream>double myPow(double x, int n) {if (n 0) {return 1.0;} else if (…...

HG/T 6088-2022 透水道路用涂料检测

透水混凝土是指由水泥、矿物掺合料、骨料、外加剂及水等主要材料经拌合形成的&#xff0c;具有透水功能的混凝土材料&#xff0c;用于其表面的涂料称为透水道路用涂料。 HG/T 6088-2022透水道路用涂料检测项目&#xff1a; 测试指标 测试方法 有害物质限量 GB 38468 在容器…...

linux定时清理docker日志脚本

Linux 定时清理 Docker 日志的脚本与配置指南 在使用 Docker 容器化应用程序时,日志文件可能会迅速增长,占用大量磁盘空间。为了保持系统的稳定性和高效运行,定期清理 Docker 日志文件是必要的。本文将介绍如何编写一个 Linux 脚本来清理 Docker 日志文件,并通过 cron 定时…...

ROS学习笔记(16):夹缝循迹

0.前言 在笔记的第15期对巡墙驾驶的原理进行了简单讲解&#xff0c;而这期我们来讲一下夹缝循迹&#xff0c;也常被叫follow the gap&#xff0c;也更新一些概念。 1.探索式路径规划与避障 1.概念 无预先建图的路径规划叫探索式路径规划&#xff0c;例如巡墙循迹和夹缝循迹&…...

【MySQL精通之路】SQL语句(3)-锁和事务语句

目录 1.START TRANSACTION、COMMIT和ROLLBACK语句 2.无法回滚的语句 3.导致隐含COMMIT的语句 4.SAVEPOINT、ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT语句 5.LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE语句 6.LOCK TABLE和UNLOCK TABLES语句 6.1 表锁获取 6.2 表锁释放…...

211大学计算机专业不考408,新增的交叉专业却考408!南京农业大学计算机考研考情分析!

南京农业大学信息科技学院可追溯至1981年成立的计算中心和1985年筹建的农业图书情报专业。1987年设立了农业图书情报系&#xff0c;1993 年农业图书情报系更名为信息管理系&#xff0c;本科专业名称也于1999年更名为信息管理与信息系统专业。1994年计算中心开始招收计算机应用专…...

利用java8 的 CompletableFuture 优化 Flink 程序,性能提升 50%

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

香橙派 AIpro综合体验及AI样例运行

香橙派 AIpro综合体验及AI样例运行 环境&#xff1a; 香橙派版本&#xff1a; AIpro(8TOPSINT8) OS : Ubuntu 22.04.3 LTS(GNU/Linux 5.10.0 aarch64) (2024-03-18) 远程服务端1&#xff1a;OpenSSH 8.9p1 远程服务端2&#xff1a;TightVNC Server 1.3.10 远程客户端&#xf…...

通过域名接口申请免费的ssl多域名证书

来此加密已顺利接入阿里云的域名接口&#xff0c;用户只需一键调用&#xff0c;便可轻松完成域名验证&#xff0c;从而更高效地申请证书。接下来&#xff0c;让我们详细解读一下整个操作过程。 来此加密官网 免费申请SSL证书 免费SSL多域名证书&#xff0c;泛域名证书。 首先&a…...

【JAVA WEB实用与优化技巧】如何自己封装一个自定义UI的Swagger组件,包含Swagger如何处理JWT无状态鉴权自动TOKEN获取

目录 一、Swagger 简介1. 什么是 Swagger&#xff1f;2. 如何使用 Swagger3. Springboot 中swagger的使用示例1. maven 引入安装2. java配置 二、Swagger UI存在的缺点1.不够方便直观2.请求的参数没有缓存3.不够美观4.如果是JWT 无状态登录&#xff0c;Swagger使用起来就没有那…...

理解大语言模型(二)——从零开始实现GPT-2

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch11_llm/char_gpt.ipynb1 本文将讨论如何利用PyTorch从零开始搭建G…...

SSH远程登录时常见问题解决

SSH时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 问题解决——SSH时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 翻译过来就是 警告&#xff1a;远程主机标识已更改&#xff01; 此报错是由于远程的…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...