openssl下aes128算法gcm模式加解密运算实例
- 开源代码
- 2025-09-19 05:33:01

aes128算法gcm接口 加密 int openssl_aes128_encrypt_gcm( unsigned char *key, unsigned char *iv, uint8_t *aad, int aad_size, unsigned char *in_buf, int in_len, unsigned char *out_buf, int* out_len, unsigned char *tag) { int len = 0,enc_len=0; EVP_CIPHER_CTX* ctx = NULL; ctx = EVP_CIPHER_CTX_new(); //printf("%s %d aad_size=%d\n", __func__, __LINE__, aad_size); EVP_EncryptInit_ex(ctx, EVP_aes_128_gcm(), NULL, NULL, NULL); EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, 12, NULL); /* Initialise key and IV */ EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv); /* Zero or more calls to specify any AAD */ EVP_EncryptUpdate(ctx, NULL, &len, aad, aad_size); /* Encrypt plaintext */ EVP_EncryptUpdate(ctx, out_buf, &len, in_buf, in_len); enc_len = len; /* Output encrypted block */ // printf("Ciphertext:\n"); // BIO_dump_fp(stdout, out_buf, len); /* Finalise: note get no output for GCM */ EVP_EncryptFinal_ex(ctx, out_buf+enc_len, &len); enc_len += len; /* Get tag */ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, 16, tag); /* Output tag */ // printf("Tag:\n"); // BIO_dump_fp(stdout, tag, 16); EVP_CIPHER_CTX_free(ctx); *out_len = enc_len; #if 0 printf("%s %d key=%d\n", __func__, __LINE__, 16); data_dump(key, 16); printf("%s %d iv=%d\n", __func__, __LINE__, 16); data_dump(iv, 16); printf("%s %d in_buf=%d\n", __func__, __LINE__, in_len); data_dump(in_buf, in_len); printf("%s %d out_buf=%d\n", __func__, __LINE__, in_len); data_dump(out_buf, in_len); printf("%s %d tag=%d\n", __func__, __LINE__, 16); data_dump(tag, 16); #endif return 0; } 解密 int openssl_aes128_decrypt_gcm( unsigned char *key, unsigned char *iv, uint8_t *aad, int aad_size, unsigned char *in_buf, int in_len, unsigned char *out_buf, int* out_len, unsigned char *tag) { int len = 0; printf("%s %d\n", __func__, __LINE__); EVP_CIPHER_CTX *dec_ctx = EVP_CIPHER_CTX_new(); EVP_DecryptInit_ex(dec_ctx, EVP_aes_128_gcm(), NULL, NULL, NULL); EVP_CIPHER_CTX_ctrl(dec_ctx, EVP_CTRL_AEAD_SET_IVLEN, 12, NULL); EVP_DecryptInit_ex(dec_ctx, NULL, NULL, key, iv); EVP_DecryptUpdate(dec_ctx, NULL, &len, aad, aad_size); EVP_DecryptUpdate(dec_ctx, out_buf, &len, in_buf, in_len); *out_len = len; EVP_DecryptFinal_ex(dec_ctx, out_buf + len, &len); *out_len += len; EVP_CIPHER_CTX_ctrl(dec_ctx, EVP_CTRL_GCM_SET_TAG, 16, tag); return 0; }
openssl下aes128算法gcm模式加解密运算实例由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“openssl下aes128算法gcm模式加解密运算实例”