上一篇文章已经完成了调用gmssl测试Sm4算法实现,https://blog.csdn.net/lingdukafeibj/article/details/107493356
本文继续测试SM3算法:写了一个简单的测试demo ,主函数直接调用就行了,并且在头文件已声明。(代码不规范处可以指出来,c语言的小白。。。)
#pragma once #include "openssl/sm3.h" #include <openssl/evp.h> #include <openssl/err.h> #include "headtest.h" #define GETCH() getchar()
int sm3Test() { EVP_MD_CTX* mdctx; const EVP_MD* md; unsigned char mess1[] = "12345678abcderty";
unsigned char md_value[EVP_MAX_MD_SIZE] = { 0 }; int md_len, i;
md = EVP_get_digestbyname("sm3");
if (!md) { return -1; }
mdctx = EVP_MD_CTX_new(); //分配、初始化并返回摘要上下文. EVP_DigestInit_ex(mdctx, md, NULL); //设置摘要上下文ctx以使用ENGINE impl中的摘要类型. EVP_DigestUpdate(mdctx, mess1, 64); //将d处的cnt字节数据散列到摘要上下文ctx中. EVP_DigestFinal_ex(mdctx, md_value, (unsigned int*)&md_len);//从ctx检索摘要值并将其存入md中. EVP_MD_CTX_free(mdctx);
printf("sm3 Digest is: \n"); for (i = 0; i < md_len; i++) { printf("%02x ", md_value[i]); if (i % 16 == 15) { printf("\n"); } } printf("\n"); printf("\n按任意键继续..."); GETCH();
return 0; }
此外发现有小伙伴已经整理了EVP库的详解( https://blog.csdn.net/liao20081228/article/details/76285896 ),大家可以看看。
此外sm2算法实现的加解密、签名验签也已经完成了,但是代码有点长,上传不好看,有需要的小伙伴可以私信我。