首页 > 其他分享 >sdf 测试-2-openssl

sdf 测试-2-openssl

时间:2024-05-20 09:40:31浏览次数:14  
标签:md SM3 openssl unsigned char SDF sdf 测试

在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

标签:md,SM3,openssl,unsigned,char,SDF,sdf,测试
From: https://www.cnblogs.com/20211115fyq/p/18201263

相关文章

  • sdf 测试-2-openssl
    sdf测试-2-openssl任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容和AI要给出详细过程,否则不得分。0.根据gmt0018标准,如何调用接口实现基于SM3求你的学号姓名的SM3值?(5‘)1.使用OpenSSL实现SDF接口中的hash运算接口,至少支持SM3算法,把......
  • sdf 测试-1-龙脉智能钥匙
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容和AI要给出详细过程,否则不得分。0.根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(10‘)使用龙脉智能钥匙定义一个私有函数......
  • sdf 测试-1
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容和AI要给出详细过程,否则不得分。根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(10‘)使用龙脉智能钥匙定义一个私有函数stati......
  • sdf 测试-1-龙脉智能钥匙
    sdf测试-1-龙脉智能钥匙任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容和AI要给出详细过程,否则不得分。0.根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(1......
  • 5月20测试1
    根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(10‘)使用龙脉智能钥匙定义一个私有函数staticintgetRandom(char*r,intlength),获取length个字节的随机数(5‘)把上述函数集成到src中的sdf.c......
  • sdf 测试-1-龙脉智能钥匙
    目录根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(10‘)具体要求代码截图:main.csdf.hsdf.c运行截图具体代码ifndef_SDF_Hdefine_SDF_HdefineSDF_OK0x0//操作成功defineSDR_BASE0x01000000//......
  • 20211128—sdf 测试-1-龙脉智能钥匙
    SDF_OpenDevice:连接到设备并打开设备句柄。SDF_Initialize:初始化设备。SDF_CreateApplication:创建应用程序。SDF_SelectApplication:选择应用程序。然后,您可以调用SDF_GenerateRandom函数来生成随机数。调用顺序如下所示:SDF_OpenDeviceSDF_InitializeSDF_CreateApplicationSDF_Sel......
  • 5/19/2024 测试
    总结P都不是,(本人)成绩构思依托(10pts)。有重题,而且是同一场比赛出现两道一模一样的题(T1&&T4)题目&题解T1ColorDescription有\(n\)个球排成一列,每个球都有一个颜色,用\(A\simZ\)的大写字母来表示,我们每次随机选出两个球\(b_1,b_2\),使得后者染上前者的颜色,求期望......
  • 测试
    点击查看代码<scriptsrc="https://guangzan.gitee.io/awescnb/index.js"></script><script>constopts={theme:{name:'geek',url:"https://acnblogs.gitee.io/acnb-theme-geek/index.iife.js",......
  • stm32f103c8t6使用bootloader进行ymodem下载和app程序测试,部分总结(暂未测试中断向量偏
    bootloader程序部分(功能测试)print_boot_message();/*USERCODEEND2*//*Infiniteloop*//*USERCODEBEGINWHILE*/uint8_tkey_get_state;while(1){/*USERCODEENDWHILE*//*USERCODEBEGIN3*/key_get_state=g......