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\n"); return; } //数据加密 rv = EVP_EncryptUpdate(ctx,out,&outl,(const unsigned char*)msg,strlen(msg)); if(rv!=1) { printf("Err\n"); return; } //结束数据加密,把剩余数据输出。 rv = EVP_EncryptFinal_ex(ctx,out+outl,&outltmp); if(rv!=1) { printf("Err\n"); return; } outl = outl +outltmp; printf("原文为:%s\n",msg); //打印输出密文 printf("密文长度:%d\n密文数据:\n",outl); for(i=0;i<outl;i++) { printf("0x%02x ",out[i]); } printf("\n");}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的摘要值为:\n",msg1,msg2); for(i = 0; i < sm3_len; i++) { printf("0x%02x ", sm3_value[i]); } printf("\n");}int main(){ OpenSSL_add_all_algorithms(); tDigest(); return 0;} |


浙公网安备 33010602011771号