0429测试1
任务详情
1命令行过程截图

2代码和运行截图

代码:
#include <stdio.h>
#include <openssl/evp.h>
#include <openssl/rand.h>
int main(void) {
// 初始化变量
unsigned char key[] = "2021112520211125"; // 16字节密钥
unsigned char iv[] = {0}; // 初始化向量全0,实际应用中应随机生成
unsigned char plaintext[] = "20211125"; // 明文
unsigned char ciphertext[1024]; // 密文存储
unsigned char decryptedtext[1024]; // 解密后的文本存储
int decryptedtext_len, ciphertext_len;
// 创建和初始化上下文
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
// 加密初始化
EVP_EncryptInit_ex(ctx, EVP_sm4_ecb(), NULL, key, iv);
// 加密
EVP_EncryptUpdate(ctx, ciphertext, &ciphertext_len, plaintext, sizeof(plaintext));
EVP_EncryptFinal_ex(ctx, ciphertext + ciphertext_len, &decryptedtext_len);
ciphertext_len += decryptedtext_len;
// 清理加密上下文
EVP_CIPHER_CTX_free(ctx);
ctx = EVP_CIPHER_CTX_new();
// 解密初始化
EVP_DecryptInit_ex(ctx, EVP_sm4_ecb(), NULL, key, iv);
// 解密
EVP_DecryptUpdate(ctx, decryptedtext, &decryptedtext_len, ciphertext, ciphertext_len);
EVP_DecryptFinal_ex(ctx, decryptedtext + decryptedtext_len, &decryptedtext_len);
decryptedtext_len += decryptedtext_len;
// 清理解密上下文
EVP_CIPHER_CTX_free(ctx);
// 输出结果
printf("Ciphertext is:\n");
for(int i = 0; i < ciphertext_len; i++)
printf("%02x", ciphertext[i]);
printf("\n");
printf("Decrypted text is:\n%s\n", decryptedtext);
return 0;
}

浙公网安备 33010602011771号