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;
} 

3龙脉的代码和运行截图

posted @ 2024-04-29 09:10  6666666mjz  阅读(28)  评论(0)    收藏  举报