C语言实现SM3(基于GMSSL)

上一篇文章已经完成了调用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算法实现的加解密、签名验签也已经完成了,但是代码有点长,上传不好看,有需要的小伙伴可以私信我。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值