C语言使用mbedTLS库实现AES加解密示例
#include <stdio.h> #include <string.h> #include <mbedtls/aes.h>
#define AES_KEY_LEN 256
int aes_encrypt(const unsigned char *key, const unsigned char *input, unsigned char *output, size_t len) { mbedtls_aes_context ctx; mbedtls_aes_init(&ctx);
int ret = mbedtls_aes_setkey_enc(&ctx, key, AES_KEY_LEN);
if (ret != 0) {
mbedtls_aes_free(&ctx);
return ret;
}
mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, input, output);
mbedtls_aes_free(&ctx);
return 0;
}
int aes_decrypt(const unsigned char *key, const unsigned char *input, unsigned char *output, size_t len) { mbedtls_aes_context ctx; mbedtls_aes_init(&ctx);
int ret = mbedtls_aes_setkey_dec(&ctx, key, AES_KEY_LEN);
if (ret != 0) {
mbedtls_aes_free(&ctx);
return ret;
}
mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_DECRYPT, input, output);
mbedtls_aes_free(&ctx);
return 0;
}
int main() { const unsigned char key[AES_KEY_LEN / 8] = "0123456789abcdef"; const unsigned char plaintext[16] = "Hello, World!"; unsigned char ciphertext[16]; unsigned char decryptedtext[16];
// 加密
aes_encrypt(key, plaintext, ciphertext, sizeof(plaintext));
printf("Ciphertext: ");
for (int i = 0; i < sizeof(ciphertext); i++) {
printf("%02x", ciphertext[i]);
}
printf("\n");
// 解密
aes_decrypt(key, ciphertext, decryptedtext, sizeof(ciphertext));
printf("Decrypted text: %s\n", decryptedtext);
return 0;
} 该示例使用mbedtls_aes_context结构体表示AES上下文,并通过aes_encrypt和aes_decrypt函数实现加解密功能。代码使用了256位密钥和16字节明文进行演示,并省略了错误处理和内存分配代码。在实际应用中,需要根据需要进行相应的错误检查和内存管理。
原文地址: https://www.cveoy.top/t/topic/qEQz 著作权归作者所有。请勿转载和采集!