sdf 测试-2-openssl

任务详情

在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容 和AI要给出详细过程,否则不得分。
0.根据gmt0018标准,如何调用接口实现基于SM3求你的学号姓名的SM3值?(5‘)
1.使用OpenSSL实现SDF接口中的hash运算接口,至少支持SM3算法,把相关函数集成到src中的sdf.c中中(5')
3.在test中的main.c调用进行测试,至少测试计算你的学号(数字),你的学号(字符串)的SM3值。(5‘)
4.提交代码(或代码链接)和运行结果截图

代码

main.c


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sdf.h"

int main() {
unsigned char hash[32]; // 用于存储哈希值的缓冲区,SM3长度为256位,即32字节
const char *student_id_str = "20211103"; // 学号字符串
const unsigned char student_id_bytes[] = {0x20, 0x21, 0x11, 0x03}; // 学号字节数组

// 计算学号字符串的哈希值
if (sm3_hash((const unsigned char *)student_id_str, strlen(student_id_str), hash) == 0) {
printf("SM3 hash of student ID (string): ");
for (int i = 0; i < 32; i++) {
printf("%02x", hash[i]);
}
printf("\n");
} else {
printf("Failed to calculate SM3 hash of student ID (string).\n");
}

// 计算学号字节数组的哈希值
if (sm3_hash(student_id_bytes, sizeof(student_id_bytes), hash) == 0) {
printf("SM3 hash of student ID (bytes): ");
for (int i = 0; i < 32; i++) {
printf("%02x", hash[i]);
}
printf("\n");
} else {
printf("Failed to calculate SM3 hash of student ID (bytes).\n");
}

return 0;
}

sdf.c

#include <openssl/evp.h>
#include "sdf.h"

int sm3_hash(const unsigned char *data, size_t data_len, unsigned char *hash) {
EVP_MD_CTX *md_ctx;
const EVP_MD *md;
unsigned int hash_len;

md = EVP_sm3(); // 使用SM3算法
md_ctx = EVP_MD_CTX_new();
if (md_ctx == NULL) {
return -1; // 初始化失败
}

if (1 != EVP_DigestInit_ex(md_ctx, md, NULL)) {
EVP_MD_CTX_free(md_ctx);
return -1; // 初始化哈希上下文失败
}

if (1 != EVP_DigestUpdate(md_ctx, data, data_len)) {
EVP_MD_CTX_free(md_ctx);
return -1; // 哈希更新失败
}

if (1 != EVP_DigestFinal_ex(md_ctx, hash, &hash_len)) {
EVP_MD_CTX_free(md_ctx);
return -1; // 哈希计算失败
}

EVP_MD_CTX_free(md_ctx);
return 0; // 哈希计算成功
}

sdf.h

#ifndef SDF_H
#define SDF_H

int sm3_hash(const unsigned char *data, size_t data_len, unsigned char *hash);

#endif /* SDF_H */

截图

 

 

posted @   HOSF  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示