#include #include #include #include "mbedtls/aes.h" #define RAWDATALEN 16 // uint8_t rawData[RAWDATALEN]; uint8_t aes_iv[16]; // aes key,加密和解密要用同样的key uint8_t aes_key[16] = {0xFE, 0x63, 0x96, 0xF9, 0x5C, 0xEF, 0xB8, 0xF4, 0x07, 0x05, 0xD1, 0xB6, 0xEB, 0xAB, 0xEA, 0x07}; uint8_t aes_iv_original[16] = {0x3D, 0x27, 0x4E, 0x83, 0x43, 0x5D, 0x30, 0xEC, 0x62, 0xEB, 0x90, 0x3A, 0xAC, 0x60, 0x12, 0xF5}; mbedtls_aes_context aes; void sb_aes_init() { // 初始化aes上下文 mbedtls_aes_init(&aes); } void reset_iv() { // 该函数用于每次加密、解密前,重置iv值,iv值的内容是随意定的,只要起到不是随便就能猜中的IV值即可。 // 加、解密所用的iv值必须相同。此处把iv值设置为0~15 memcpy(aes_iv, aes_iv_original, 16); } int sb_aes_encrypt(uint8_t *crypt_data, int crypt_len, uint8_t *output_data) { int ret; // 设置加密的key mbedtls_aes_setkey_enc(&aes, aes_key, 128); reset_iv(); // 因为调用mbedtls_aes_crypt_cbc后传入的iv值会有变化,重置iv值会有变化 ret = mbedtls_aes_crypt_cbc(&aes, MBEDTLS_AES_ENCRYPT, crypt_len, aes_iv, crypt_data, output_data); if (ret) { return -1; } return crypt_len; } int sb_aes_decrypt(uint8_t *crypt_data, int crypt_len, uint8_t *output_data) { int ret; // 设置解密的key mbedtls_aes_setkey_dec(&aes, aes_key, 128); reset_iv(); // 因为调用mbedtls_aes_crypt_cbc后传入的iv值会有变化,重置iv值会有变化 ret = mbedtls_aes_crypt_cbc(&aes, MBEDTLS_AES_DECRYPT, crypt_len, aes_iv, crypt_data, output_data); if (ret) { return -1; } return crypt_len; } // void app_main(void) //{ // uint8_t encData[RAWDATALEN] = { 0 }; // uint8_t decData[RAWDATALEN] = { 0 }; // sb_aes_init(); // 初始化aes上下文 // // 打印原始数据 // printf("rawData:\t"); // for (int i = 0; i < RAWDATALEN; i++) { // printf("%02x, ", rawData[i]); // } // printf("\n"); // // 加密 // int encresult = sb_aes_encrypt(rawData, sizeof(rawData), encData); // printf("enc data(%d):\t", encresult); // for (int i = 0; i < RAWDATALEN; i++) { // printf("%02x, ", encData[i]); // } // printf("\n"); // // 解密 // int decresult = sb_aes_decrypt(encData, RAWDATALEN, decData); // printf("dec data(%d):\t", decresult); // for (int i = 0; i < RAWDATALEN; i++) { // printf("%02x, ", decData[i]); // } // printf("\n"); //}