zoukankan      html  css  js  c++  java
  • OpenSSL API使用

    1.

     链接:https://blog.csdn.net/bruce135lee/article/details/81811403
    2.链接:https://www.cnblogs.com/gordon0918/p/5332803.html

     3.SM4

    代码链接

    #include <stdio.h>

    #include <string.h>
    #include <windows.h>
    #include <openssl/evp.h>
    #include <openssl/x509.h>
     
     
    void tEVP_Encrypt()
    {
        unsigned char key[EVP_MAX_KEY_LENGTH];  //密钥
        unsigned char iv[EVP_MAX_KEY_LENGTH];//初始化向量
        EVP_CIPHER_CTX* ctx;//EVP算法上下文
        unsigned char out[1024];//输出密文缓冲区
        int outl;//密文长度
        int outltmp;
        const char *msg="Hello OpenSSL";//待加密的数据
        int rv;
        int i;
        //初始化函数才能用!
            ctx = EVP_CIPHER_CTX_new();
        //设置key和iv(可以采用随机数和可以是用户输入)
        for(i=0;i<24;i++)
        {
            key[i]=i;
        }
        for(i=0;i<8;i++)
        {
            iv[i]=i;
        }
        //初始化密码算法结构体
        EVP_CIPHER_CTX_init(ctx);
        //设置算法和密钥以
        rv = EVP_EncryptInit_ex(ctx,EVP_sm4_cbc(),NULL,key,iv);
        if(rv!=1)
        {
            printf("Err ");
            return;
        }
        //数据加密
        rv = EVP_EncryptUpdate(ctx,out,&outl,(const unsigned char*)msg,strlen(msg));
        if(rv!=1)
        {
            printf("Err ");
            return;
        }
        //结束数据加密,把剩余数据输出。
        rv = EVP_EncryptFinal_ex(ctx,out+outl,&outltmp);
        if(rv!=1)
        {
            printf("Err ");
            return;
        }
        outl = outl +outltmp;
        printf("原文为:%s ",msg);
        //打印输出密文
        printf("密文长度:%d 密文数据: ",outl);
        for(i=0;i<outl;i++)
        {
            printf("0x%02x ",out[i]);
        }
        printf(" ");
     
    }
     
    int main()
    {
     
        OpenSSL_add_all_algorithms();
        tEVP_Encrypt();
        return 0;
    }

     SM3

    代码:

    mysm3.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    #include <string.h>
    #include <openssl/evp.h>
    void tDigest()
    {
        unsigned char sm3_value[EVP_MAX_MD_SIZE];   //保存输出的摘要值的数组
        int sm3_len, i;
        EVP_MD_CTX *sm3ctx;                         //EVP消息摘要结构体
        sm3ctx = EVP_MD_CTX_new();//调用函数初始化
        char msg1[] = "Test Message1";              //待计算摘要的消息1
        char msg2[] = "Test Message2";              //待计算摘要的消息2
         
        EVP_MD_CTX_init(sm3ctx);                    //初始化摘要结构体
        EVP_DigestInit_ex(sm3ctx, EVP_sm3(), NULL); //设置摘要算法和密码算法引擎,这里密码算法使用sm3,算法引擎使用OpenSSL默认引擎即软算法
        EVP_DigestUpdate(sm3ctx, msg1, strlen(msg1));//调用摘要UpDate计算msg1的摘要
        EVP_DigestUpdate(sm3ctx, msg2, strlen(msg2));//调用摘要UpDate计算msg2的摘要 
        EVP_DigestFinal_ex(sm3ctx, sm3_value, &sm3_len);//摘要结束,输出摘要值   
        EVP_MD_CTX_reset(sm3ctx);                       //释放内存
         
        printf("原始数据%s和%s的摘要值为: ",msg1,msg2);
        for(i = 0; i < sm3_len; i++)
        {
            printf("0x%02x ", sm3_value[i]);
        }
        printf(" ");
    }
    int main()
    {
        OpenSSL_add_all_algorithms();
        tDigest();
        return 0;
    }

     



  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/lxhs/p/15540112.html
Copyright © 2011-2022 走看看