sdf 测试-2-openssl

news/2024/11/16 15:50:51/文章来源:https://www.cnblogs.com/20211115fyq/p/18201263

在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. 提交代码(或代码链接)和运行结果截图

首先,针对你的请求,我将提供一个简化的步骤和示例代码来实现这些要求。需要注意的是,直接调用GMT 0018标准中描述的接口可能涉及特定的硬件或软件库,而这里我将演示如何使用OpenSSL库来支持SM3哈希算法,并将其集成到你的sdf.c和main.c文件中。

  1. 实现SDF接口中的hash运算接口
    在src/sdf.c中,添加一个新的函数来封装SM3哈希计算。

                                `c// src/sdf.h  #ifndef SDF_H  #define SDF_H  // ... 其他声明 ...  int SDF_SM3(const unsigned char *d, size_t n, unsigned char *md);  // ... 其他声明 ...  #endif // SDF_H  // src/sdf.c  #include <stdio.h>  #include <openssl/evp.h>  #include "sdf.h"  int SDF_SM3(const unsigned char *d, size_t n, unsigned char *md) {  EVP_MD_CTX *mdctx;  const EVP_MD *md_sm3;  unsigned int mdlen;  int ret = 1;  `OpenSSL_add_all_digests(); // 确保所有digests都被加载  md_sm3 = EVP_get_digestbyname("SM3");  if (!md_sm3) {  fprintf(stderr, "Unknown message digest SM3\n");  
    return 0;  }  mdctx = EVP_MD_CTX_new();  if (!mdctx) {  fprintf(stderr, "Failed to create context\n");  return 0;  }  if (EVP_DigestInit_ex(mdctx, md_sm3, NULL) != 1) {  fprintf(stderr, "Failed to initialize context\n");  goto end;  }  if (EVP_DigestUpdate(mdctx, d, n) != 1) {  
    fprintf(stderr, "Failed to update context\n");  
    goto end;  }  if (EVP_DigestFinal_ex(mdctx, md, &mdlen) != 1) {  
    fprintf(stderr, "Failed to finalize context\n");  
    goto end;  }  ret = 0; // 成功  end:  EVP_MD_CTX_free(mdctx);  return ret;  
    }  // ... 其他函数的实现 ...
    
  2. 在test/main.c中调用进行测试
    ` c
    // test/main.c
    #include <stdio.h>
    #include <string.h>
    #include "../src/sdf.h"

     int main() {  // 学号(数字形式)作为字符串处理  const char *student_id_num = "20211115";  unsigned char md_num[32]; // SM3的哈希值长度为256位(32字节)  // 学号(字符串形式)直接就是字符串  const char *student_id_str = "20211115";  unsigned char md_str[32];  if (SDF_SM3((const unsigned char *)student_id_num, strlen(student_id_num), md_num) == 0) {  printf("学号(数字形式)的SM3哈希值为: ");  for (int i = 0; i < sizeof(md_num); i++) {  printf("%02x", md_num[i]);  }  printf("\n");  } else {  printf("计算学号(数字形式)的SM3哈希值失败\n");  }  if (SDF_SM3((const unsigned char *)student_id_str, strlen(student_id_str), md_str) == 0) {  printf("学号(字符串形式)的SM3哈希值为: ");  for (int i = 0; i < sizeof(md_str); i++) {  printf("%02x", md_str[i]);  }  printf("\n");  } else {  printf
    

`
image

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

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

相关文章

阅读习惯2

本学期阅读成果总结阅读书单选择与总结: 我选择了参考的书单链接(https://weread.qq.com/misc/booklist/3107758_7sb8Fs2Hv),并从中挑选了几本书开始阅读。阅读数据截图:总时长:250 小时 册数:15 本 笔记数:47 条本学期的收获:阅读时长增加:本学期我总共阅读了250小时…

lodash已死?radash库方法介绍及源码解析 —— 函数柯里化 + Number篇

点赞 + 收藏 = 学会! 本篇我们介绍radash中函数柯里化和Number 相关的方法使用和源码解析。深入学习radash中的方法思想和底层实现。写在前面 tips:点赞 + 收藏 = 学会!主页有更多其他篇章的方法,欢迎访问查看。 本篇我们继续介绍radash中函数柯里化和Number 相关的方法使用…

sdf 测试-1-龙脉智能钥匙

在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容 和AI要给出详细过程,否则不得分。 0. 根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(10‘)使用龙脉智能钥匙…

sdf 测试-1

在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容 和AI要给出详细过程,否则不得分。根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(10‘) 使用龙脉智能钥匙定义一…

Spring 对于事务上的应用的详细说明

1. Spring 对于事务上的应用的详细说明 @目录1. Spring 对于事务上的应用的详细说明每博一文案2. 事务概述3. 引入事务场景3.1 第一步:准备数据库表3.2 第二步:创建包结构3.3 第三步:准备对应数据库映射的 Bean 类3.4 第四步:编写持久层3.5 第五步:编写业务层3.6 第六步:…

日常Bug排查-偶发性读数据不一致

日常Bug排查-偶发性读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。 Bug现场 业务场景 先描述这个问题出现的业务场景。这是一个支付的场景,如果支付成功了,我们就把支付状态置为success(主单据更新)同…

多线程和多进程 - 初窥

一、说明 在平常工作中,我们使用top命令查看一台linux服务器的cpu使用情况时,会发现某个进程的cpu使用率会超过100%,这是为什么? 二、举例 实验环境为 CentOS7.6 + Python2.7 1. 多线程、多进程在操作系统中的表现形式 我们首先看两个例子,test1.py和test2.py,都是执行死…

EDP .Net开发框架--权限

EDP是一套集组织架构,权限框架【功能权限,操作权限,数据访问权限,WebApi权限】,自动化日志,动态Interface,WebApi管理等基础功能于一体的,基于.net的企业应用开发框架。通过友好的编码方式实现数据行、列权限的管控。平台下载地址:https://gitee.com/alwaysinsist/edp…

两台数据库在数据写入时性能的差异

介绍:我有两台数据库,分别称为200和203,200和203的服务器性能配置相当,203的配置甚至还要好一点。都是安装的centos7.7,oracle 19C,均已开日志归档,这两台服务器在同一个机房,同一个网段。当我在本地使用JDBC去往这两个数据库分别插入10w条记录,每插入一条提交一次,2…

【一步步开发AI运动小程序】十七、如何识别用户上传视频中的运动、动作、姿态?

【云智AI运动识别小程序插件】,可以为您的小程序,赋于人体检测识别、运动检测识别、姿态识别检测AI能力。本地原生识别引擎,内置10余个运动,无需依赖任何后台或第三方服务,有着识别速度快、体验佳、扩展性强、集成快、成本低的特点,本篇实现需要使用此插件,请先行在微信…

Mysql - 数据库时区是客户端属性还是服务端属性

一、说明 同事问我数据库的时区是客户端属性还是服务端属性,我觉得这个问题十分有意思,之前没怎么留意,自己来做下实验。 首先介绍几个术语。 GMT(Greenwich Mean Time),格林尼治平均时间。 UTC(Coordinated Universal Time),协调世界时。 CST(China Standard Time)…