首页 > 其他分享 >实验二 OpenSSL API使用

实验二 OpenSSL API使用

时间:2023-10-20 11:12:28浏览次数:28  
标签:ctx OpenSSL len unsigned API 实验 EVP include handleErrors

sm3代码

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

void handleErrors(void)
{
    ERR_print_errors_fp(stderr);
    abort();
}

void test_sm3()
{
    unsigned char data[] = "Hello, SM3!";
    unsigned char digest[EVP_MAX_MD_SIZE];
    unsigned int digest_len;

    EVP_MD_CTX *mdctx;

    mdctx = EVP_MD_CTX_new();
    if (mdctx == NULL)
        handleErrors();

    if (EVP_DigestInit_ex(mdctx, EVP_sm3(), NULL) != 1)
        handleErrors();

    if (EVP_DigestUpdate(mdctx, data, sizeof(data) - 1) != 1)
        handleErrors();

    if (EVP_DigestFinal_ex(mdctx, digest, &digest_len) != 1)
        handleErrors();

    EVP_MD_CTX_free(mdctx);

    printf("SM3 Digest: ");
    for (unsigned int i = 0; i < digest_len; i++)
        printf("%02x", digest[i]);
    printf("\n");
}

sm4代码

  GNU nano 4.8                                    sm4_test.c                                            
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/evp.h>

void handleErrors(void)
{
    fprintf(stderr, "Error occurred\n");
    exit(1);
}

void test_sm4(const unsigned char *key, const unsigned char *plaintext)
{
    EVP_CIPHER_CTX *ctx;
    unsigned char ciphertext[128];
    int len;

    // Create and initialize the context
    ctx = EVP_CIPHER_CTX_new();
    if (!ctx)
        handleErrors();

    // Encrypt the plaintext using SM4 in CBC mode
    if (EVP_EncryptInit_ex(ctx, EVP_sm4_cbc(), NULL, key, NULL) != 1)
        handleErrors();

    if (EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, strlen((char *)plaintext)) != 1)
        handleErrors();

    if (EVP_EncryptFinal_ex(ctx, ciphertext + len, &len) != 1)
        handleErrors();

    EVP_CIPHER_CTX_free(ctx);

    printf("SM4 Ciphertext: ");
    for (int i = 0; i < len + strlen((char *)plaintext); i++)
        printf("%02x", ciphertext[i]);
    printf("\n");
}

                                            [ 已读取 54 行 ]
^G 求助       ^O 写入       ^W 搜索       ^K 剪切文字   ^J 对齐       ^C 游标位置   M-U 撤销
^X 离开       ^R 读档       ^\ 替换       ^U 粘贴文字   ^T 拼写检查   ^_ 跳行       M-E 重做

标签:ctx,OpenSSL,len,unsigned,API,实验,EVP,include,handleErrors
From: https://www.cnblogs.com/lizhuotong/p/17776565.html

相关文章

  • 实验1
    task11//标准库string,vector,array基础用法2#include<iostream>3#include<string>4#include<vector>5#include<array>6//函数模板7//对满足特定条件的序列类型T对象,使用范围for输出8template<typenameT>9voidoutput1(constT&o......
  • 智能优化算法第一次实验
    智能优化算法第一次实验一、实验目的(1)掌握梯度下降法的基础知识及其应用过程;(2)利用梯度下降法求解简单优化问题。二、实验原理梯度下降法是一种最优化算法,由于函数在该点梯度的模代表着函数值在该点最大的变化率,我们可以让函数沿着梯度方向迭代移动逼近函数最值,这就是梯......
  • 实验1 类和对象
    task1:#include<iostream>#include<string>#include<vector>#include<array>template<typenameT>voidoutput1(constT&obj){for(autoi:obj)std::cout<<i<<",";std::cou......
  • 实验2
    task1.c#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;i++){number=rand......
  • 实验二
    实验任务11#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));1516for(i=0;i&......
  • 实验1
    任务1//标准库string,vector,array基础用法#include<iostream>#include<string>#include<vector>#include<array>//函数模板//对满足特定条件的序列类型T对象,使用范围for输出template<typenameT>voidoutput1(constT&obj){for(autoi:obj)st......
  • 实验1 类和对象
    实验任务一:1#include<iostream>2#include<string>3#include<vector>4#include<array>5template<typenameT>6voidoutput1(constT&obj)7{8for(autoi:obj)9std::cout<<i<<",";......
  • 实验一
    任务一点击查看代码#include<iostream>#include<string>#include<vector>#include<array>template<typenameT>voidoutput1(constT&obj){for(autoi:obj)std::cout<<i<<",";std::cout<<&qu......
  • 实验一 类与对象
    Task1:#include<iostream>#include<string>#include<vector>#include<array>template<typenameT>voidoutput1(constT&obj){for(autoi:obj)std::cout<<"i"<<",";std::cout<<......
  • 实验1_OOP_22物联网1班_张文瑞
    1.实验任务1:  实验源代码:1//标准库string,vector,array基础用法2#include<iostream>3#include<string>4#include<vector>5#include<array>6//函数模板7//对满足特定条件的序列类型T对象,使用范围for输出8template<typenameT>9voidoutpu......