AES128 ECB加密pkcs5padding补码

1、最近由于项目的需要需要AES128加密,平台是STM32,去网上找了下这类的算法基本都是c语言的,很少有适配STM32f103单片机的,所以打算结合找到的AES加密的c程序,结合到STM32的环境下。

2、这类的c代码有很多,我找的类型是AES128的ECB加密的方式(最简单的一类),下边我把我写的加密解密函数详细的讲解下:

加密函数

 void AES_Encrypt(char* pExpressText , char* pCipherText  , char* pAeskey)
{
char* str;
uint8_t buWei;
uint16_t aesDataLen;         //等待加密的数据

aesDataLen = strlen(pExpressText);  //获取加密数据的长度
buWei = 16-aesDataLen%16;             //函数是16字节加密的
memset(pExpressText+aesDataLen , buWei, buWei);

aesDataLen = strlen(pExpressText);   //获取补位之后的长度
//pExpressText:待加密的明文数据pkey:加密的密匙 str:加密后的数据
str = encrypt(pExpressText, pAeskey);  //加密的函数(将加密之后的16字节赋值给指针str)

UART_Printf ("encrypt result:  ");
UART_Printf (str);
UART_Printf ("\r\n");

//str:待编码的数据 pCipherText:编码后的数据  aesDataLen 待编码的长度
Base64Encode(str, pCipherText,aesDataLen);//base64编码,此时的数据为24字节
free(str);
UART_Printf("Base64 encoded result:  ");
UART_Printf(pCipherText);
UART_Printf("\r\n");
注:上边的加密函数将加密文继续的进行了base64的编码,这个根据自己的实际情况来添加和去除

解密的函数

 void AES_Decrypt(char* pExpressText , char* pCipherText , char* pAeskey)
{
char* str2;
uint8_t buIndex , i;
uint16_t aesDataLen;  //等待解密的数据长度
char *newstr;

aesDataLen = strlen(pCipherText);
newstr = (char *)malloc(aesDataLen);
memset(newstr , 0 , aesDataLen);
aesDataLen = Base64Decode(newstr , pCipherText, aesDataLen, true);

  UART_Printf("decoded result:  ");
  UART_Printf(newstr);
  UART_Printf("\r\n");


// send_buff:待解密的数据 pkey:密匙  str2:解密后的数据
str2 = decrypt(newstr, pAeskey , aesDataLen);
free(newstr);
//去除尾补码
buIndex = str2[aesDataLen-1];

for(i=0; i<buIndex; i++)
{
if(str2[aesDataLen-i-1] != buIndex)
{
UART_Printf("\nit is a wrong data. \n");
free(str2);
return;
}
else
str2[aesDataLen-i-1] = '\0';
}
strcpy(pExpressText , str2);  //:将解密之后的数据给pExpressText指针
free(str2);

  UART_Printf ("AES decrypt result:  ");
  UART_Printf (pExpressText);
  UART_Printf ("\r\n");
}

以上的就是加密解密的主要的函数,剩下的一些算法就是用的c语言的集成的函数

注意此加密是AES128的ECB加密,补码的方式为 pkcs5padding

下面附上源码文件
http://pan.baidu.com/s/1dFH0E6t

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForNi福尼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值