標(biāo)題:
STM32 16字節(jié)加解密的AES算法程序源碼
[打印本頁]
作者:
wwchang
時間:
2018-4-26 15:19
標(biāo)題:
STM32 16字節(jié)加解密的AES算法程序源碼
stm32 AES動態(tài)加密算法,大家可以下載進(jìn)行測試
1、該算法工程是基于Keil5環(huán)境進(jìn)行編譯下載,單片機(jī)型號是stm32f030c8.
2、打開文件夾Project,雙擊"16BytesAES.uvprojx",即可打開工程。
3、如果不想利用該工程,只需要拷貝文件夾USER下的AES.c,AES.h,main.c到自己的工程,修改頭文件即可。
stm32單片機(jī)源程序如下:
/**
******************************************************************************
* @file GPIO/GPIO_IOToggle/main.c
* @author MCD Application Team
* @version V1.4.0
* @brief Main program body
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx.h"
#include "stm32f0xx_conf.h"
#include "stdio.h"
#include "stdlib.h"
#include "Mcu_config.h"
#include "Serial.h"
#include "AES.h"
/** @addtogroup STM32F0xx_StdPeriph_Examples
* @{
*/
/** @addtogroup GPIO_IOToggle
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
* @brief Main program.
* @param None
* @retval None
*/
char expressText[1024]; //存放待加密的明文數(shù)據(jù),具體緩存大小根據(jù)用戶待加密數(shù)據(jù)長度自己任意修改
char cipherText[1024];//存放已加密的密文數(shù)據(jù),具體緩存大小根據(jù)用戶解密后的數(shù)據(jù)長度自己任意修改
char aesKey[16];//加解密的密鑰,注意:此算法只適用于AES16位密鑰加解密,不適用于32位密鑰加解密
//該AES算法加密方式為:AES-128bit/ECB/PKCS5Padding
/*
歡迎加入
二手開發(fā)板供求交易群 68936520
arm交流學(xué)習(xí)群 324753668
stm32交流學(xué)習(xí)群 227043677
*/
int main(void)
{
MCU_Init();
delay_1ms(2000);
memcpy(aesKey , "1uweiIDAS7awOas8" , 16); //AES加密密鑰,16字節(jié)(128bit)
memset(expressText ,0 ,1024);
memset(cipherText , 0 ,1024);
strcpy(expressText , "Hello!!!Are you ready???");
AES_Encrypt(expressText , cipherText , aesKey); //use aesKey encrypt
memset(expressText ,0 ,1024);
AES_Decrypt(expressText , cipherText , aesKey);//use aesKey decrypt
while(1)
{
delay_1ms(2000);
}
}
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART2, (uint8_t) ch);
/* Loop until transmit data register is empty */
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
{}
return ch;
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
void fault_handler_c(unsigned int * hardfault_args, unsigned int type);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
16字節(jié)加解密的AES算法.zip
(1.59 MB, 下載次數(shù): 400)
2018-4-26 15:18 上傳
點(diǎn)擊文件名下載附件
AES加密算法
下載積分: 黑幣 -5
作者:
aestest
時間:
2018-4-28 16:20
好資料,學(xué)習(xí)下
作者:
aestest
時間:
2018-5-2 15:20
學(xué)習(xí)
作者:
sunzhilei
時間:
2018-6-21 11:00
很好,下來學(xué)習(xí)一下。
作者:
jdzczz
時間:
2018-8-28 09:49
好好學(xué)習(xí)一下!
作者:
gmy2171
時間:
2018-8-31 15:38
加密模式是什么?ECB,CBC,CTR?
作者:
sf116
時間:
2018-9-3 14:44
測試沒通過
作者:
hayppy
時間:
2019-1-23 14:52
好資料不錯
作者:
hfahuang
時間:
2019-1-23 16:13
好資料,不錯
作者:
Steven1996
時間:
2019-1-24 10:16
好資料 試一下
作者:
南國楓火
時間:
2019-3-7 10:56
代碼有問題,測試結(jié)果錯誤
作者:
dabendan001
時間:
2019-6-4 11:51
//去除末尾補(bǔ)碼
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); //pming,2019.06.04
//return;
break;
}
else
str2[aesDataLen-i-1] = '\0';
}
strcpy(pExpressText , str2);
free(str2);
解密返回為空。我將 加日期批注的地方2行,修改之后,可以解密。但長度似乎不對。
作者:
allenlinhao
時間:
2019-7-4 19:34
樓主的東西我測試了的,ok,沒問題,謝謝
作者:
oulk
時間:
2019-8-26 09:46
下載幾次都失敗了
作者:
zwei99999999
時間:
2019-8-29 04:39
好資料,學(xué)習(xí)下
作者:
淺笑無痕殤
時間:
2019-9-5 16:02
遇到了12樓一樣的問題,解密后返回為空
作者:
liao12338392
時間:
2019-9-20 15:11
好資料,學(xué)習(xí)下
作者:
ssack
時間:
2019-11-15 09:45
看起來資料不錯, 沒分下載, 樓主能不能分少點(diǎn)
作者:
No1
時間:
2019-12-6 17:20
解密數(shù)據(jù)為空的啊
作者:
canghaiwuhen
時間:
2019-12-9 10:20
試試看能不能用
作者:
mingda33
時間:
2020-2-24 11:20
謝謝分享,剛好想?yún)⒖家幌,學(xué)習(xí)AES加密
作者:
dbwu8280
時間:
2020-4-2 22:18
正好用到,謝謝分享!
作者:
baonng
時間:
2023-12-14 10:12
我現(xiàn)在也需要,下載學(xué)習(xí)。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1