89 lines
2.5 KiB
C
89 lines
2.5 KiB
C
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <string.h>
|
||
#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");
|
||
//}
|