OpenSSL测试-SM3

第二题

#include <stdio.h>
#include <openssl/evp.h>

int main() {
    EVP_MD_CTX *mdctx;
    const EVP_MD *md;
    unsigned char md_value[EVP_MAX_MD_SIZE];
    unsigned int md_len;
    int i;

    // 初始化 OpenSSL
    OpenSSL_add_all_algorithms();

    // 创建一个 SM3 摘要对象
    md = EVP_sm3();

    // 创建摘要上下文
    mdctx = EVP_MD_CTX_new();

    // 初始化摘要上下文
    EVP_DigestInit_ex(mdctx, md, NULL);

    // 更新摘要上下文以包含待计算的数据
    EVP_DigestUpdate(mdctx, "20211301", 8);

    // 计算摘要值
    EVP_DigestFinal_ex(mdctx, md_value, &md_len);

    // 打印摘要值
    printf("SM3 Digest value: ");
    for (i = 0; i < md_len; i++) {
        printf("%02x", md_value[i]);
    }
    printf("\n");

    // 释放摘要上下文
    EVP_MD_CTX_free(mdctx);

    return 0;
}

第三题

#include <stdio.h>
#include <openssl/evp.h>

#define BUFFER_SIZE 1024

int main() {
    EVP_MD_CTX *mdctx;
    const EVP_MD *md;
    unsigned char md_value[EVP_MAX_MD_SIZE];
    unsigned int md_len;
    int i;

    // 初始化 OpenSSL
    OpenSSL_add_all_algorithms();

    // 创建一个 SM3 摘要对象
    md = EVP_sm3();

    // 创建摘要上下文
    mdctx = EVP_MD_CTX_new();

    // 初始化摘要上下文
    EVP_DigestInit_ex(mdctx, md, NULL);

    // 打开文件
    FILE *fp = fopen("all.der", "rb");
    if (fp == NULL) {
        printf("无法打开文件\n");
        return 1;
    }

    // 读取文件并更新摘要上下文
    unsigned char buffer[BUFFER_SIZE];
    size_t bytes_read;
    while ((bytes_read = fread(buffer, 1, BUFFER_SIZE, fp)) > 0) {
        EVP_DigestUpdate(mdctx, buffer, bytes_read);
    }

    // 关闭文件
    fclose(fp);

    // 计算摘要值
    EVP_DigestFinal_ex(mdctx, md_value, &md_len);

    // 打印摘要值
    printf("SM3 Digest value: ");
    for (i = 0; i < md_len; i++) {
        printf("%02x", md_value[i]);
    }
    printf("\n");

    // 释放摘要上下文
    EVP_MD_CTX_free(mdctx);

    return 0;
}
posted @ 2024-04-18 14:47  20211301郑润芃  阅读(6)  评论(0编辑  收藏  举报