OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17728|回复: 25

STM32的AES加密库

[复制链接]

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2013-8-23
在线时间
5 小时
发表于 2017-2-5 01:34:31 | 显示全部楼层 |阅读模式
一直在用,感觉很稳定,啥都不说,直接贴附件,需要的拿去参考

AES.rar

6.27 KB, 下载次数: 1826

我即狂澜,且无法被力挽
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

wensttu 该用户已被删除
发表于 2017-3-8 15:54:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-9-21
在线时间
46 小时
发表于 2017-3-14 11:32:58 | 显示全部楼层
下载了您的程序,验证了一下,明文设置为32字节,加密后的密文也为32字节
但是我在网上用AES加密工具对明文进行加密,得到的是一个48字节的密文,对两密文进行对比,发现前面的32字节一致,加密工具的密文比您的要多出16个字节。
请问你遇到过这类情况吗?AES CBC模式明文长度和密文长度是否一致呢?
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2013-8-23
在线时间
5 小时
 楼主| 发表于 2017-5-22 19:45:13 | 显示全部楼层
hellocpu 发表于 2017-3-14 11:32
下载了您的程序,验证了一下,明文设置为32字节,加密后的密文也为32字节
但是我在网上用AES加密工具对明 ...

你的什么加密工具呢,加密的数据是不是一样的?填充一样吗?
我即狂澜,且无法被力挽
回复 支持 反对

使用道具 举报

26

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1826
金钱
1826
注册时间
2015-12-18
在线时间
209 小时
发表于 2017-7-6 12:05:13 | 显示全部楼层
本帖最后由 有个脚落 于 2017-7-6 13:57 编辑

Includes.h 没找到
想学STM32,我想宝刀未老吧
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2013-8-23
在线时间
5 小时
 楼主| 发表于 2017-7-10 00:31:25 | 显示全部楼层

那个用不着,你工程里面包含了算法的.h就行啦
我即狂澜,且无法被力挽
回复 支持 反对

使用道具 举报

1

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
796
金钱
796
注册时间
2012-7-19
在线时间
110 小时
发表于 2017-7-12 11:29:08 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-5-16
在线时间
1 小时
发表于 2018-5-16 18:15:51 | 显示全部楼层
这句buf[buf[1]+2] = HCGetCheckSum(buf, buf[1]+2);  中的HCGetCheckSum函数怎么找不到定义出?
回复 支持 反对

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2018-9-4 17:13:43 | 显示全部楼层
本帖最后由 ssssssssssss 于 2018-9-4 17:15 编辑

确定很稳定吗?[mw_shl_code=applescript,true]#include "Includes.h"
#include "AES.h"
#include "..\AES\track_fun_AES.h"
/*----------------usersetting------------*/

/*----------------end usersetting------------*/
unsigned char Use_AES = AES_DISABLR;

unsigned char AES128key[16] = "123456789abcdefa";//秘钥
unsigned char AES_IV[16]= "0102030405123456";//向量表
//unsigned char AES128expKey[4 * Nc * (Nr + 1)];  //初始化密钥
void AES_UART1_SendData(unsigned char *src,unsigned char len)
{
    //unsigned char AES_Len;
    unsigned char buf[256];
    //unsigned char out[16];//密文输出
    unsigned char in[48] = {0};
    unsigned char i;
    if(Use_AES == AES_ENABLE)
    {
        AES_Init(AES128key);//AES初始化
        for (i=0;i<len-3;i++)
        {
        in = src[i+2];
        }
         
        buf[0] = 0xBA;
        buf[1] = ((len-3)/16+1)*16;
        AES_Encrypt(in, buf+2, buf[1], AES_IV);//加密
        //AES_Decrypt(buf+2, buf+2, buf[1], AES_IV);//解密
        buf[buf[1]+2] = HCGetCheckSum(buf, buf[1]+2);
        UART1_SendData(buf, buf[1]+3);
    }
    else
    {
        UART1_SendData(src, len);
    }
}
// 串口解密
//串口数据过滤
unsigned char AES_UART_DECODE(void)
{
    unsigned char len=0;
    if(cUart1RxData[0] == 0xBA)
    {
        if((cUart1RxData[1]%16)==0)
        {
            len = cUart1RxData[1];
            AES_Decrypt(cUart1RxData+2, cUart1RxData+2, len, AES_IV);//解密
            
            cUart1RxData[0] = 0xBB;//转换帧头
            cUart1RxData[1] = cUart1RxData[3] + 2;// 重新算长度
            cUart1RxData[cUart1RxData[1]+ 2] = HCGetCheckSum(cUart1RxData, cUart1RxData[1]+ 2);//从新算校验
            return 1;//h加密
        }
        else
        {
            return 2;//加密信息长度错误
        }
    }
    else
    {
        return 0;//没加密
    }
}[/mw_shl_code][mw_shl_code=applescript,true]
#ifndef __AES_H_
#define __AES_H_

#define     AES_ENABLE      1
#define     AES_DISABLR     0

extern unsigned char AES128key[16];//秘钥
extern void AES_Init(const void *pKey);
extern unsigned char Use_AES;
void AES_UART1_SendData(unsigned char *src,unsigned char len);
unsigned char AES_UART_DECODE(void);


#endif[/mw_shl_code]
回复 支持 反对

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2018-9-4 17:17:16 | 显示全部楼层
[mw_shl_code=applescript,true]#ifndef _TRACK_FUN_AES_H
#define _TRACK_FUN_AES_H

/****************************************************************************
*  Include Files                        包含头文件
*****************************************************************************/
//#include "track_drv.h"

/*****************************************************************************
*  Define                               宏定义
******************************************************************************/

/*****************************************************************************
*  Typedef  Enum                        枚举定义
*****************************************************************************/

/*****************************************************************************
*  Struct                               数据结构定义
******************************************************************************/

/****************************************************************************
*  Global Variable - Extern             引用全局变量
*****************************************************************************/

/*****************************************************************************
*  Functions Define                     函数声明
******************************************************************************/

// 以bit为单位的密钥长度,只能为 128,192 和 256 三种
#define AES_KEY_LENGTH        128

// 加解密模式
#define AES_MODE_ECB        0                                // 电子密码本模式(一般模式)
#define AES_MODE_CBC        1                                // 密码分组链接模式
#define AES_MODE                AES_MODE_CBC


///////////////////////////////////////////////////////////////////////////////
//        函数名:        AES_Init
//        描述:                初始化,在此执行扩展密钥操作。
//        输入参数:        pKey -- 原始密钥,其长度必须为 AES_KEY_LENGTH/8 字节。
//        输出参数:        无。
//        返回值:        无。
///////////////////////////////////////////////////////////////////////////////
void AES_Init(const void *pKey);

//////////////////////////////////////////////////////////////////////////
//        函数名:        AES_Encrypt
//        描述:                加密数据
//        输入参数:        pPlainText        -- 明文,即需加密的数据,其长度为nDataLen字节。
//                                nDataLen        -- 数据长度,以字节为单位,必须为AES_KEY_LENGTH/8的整倍数。
//                                pIV                        -- 初始化向量,如果使用ECB模式,可设为NULL。
//        输出参数:        pCipherText        -- 密文,即由明文加密后的数据,可以与pPlainText相同。
//        返回值:        无。
//////////////////////////////////////////////////////////////////////////
void AES_Encrypt(const unsigned char *pPlainText, unsigned char *pCipherText,
                                 unsigned int nDataLen, const unsigned char *pIV);

//////////////////////////////////////////////////////////////////////////
//        函数名:        AES_Decrypt
//        描述:                解密数据
//        输入参数:        pCipherText -- 密文,即需解密的数据,其长度为nDataLen字节。
//                                nDataLen        -- 数据长度,以字节为单位,必须为AES_KEY_LENGTH/8的整倍数。
//                                pIV                        -- 初始化向量,如果使用ECB模式,可设为NULL。
//        输出参数:        pPlainText  -- 明文,即由密文解密后的数据,可以与pCipherText相同。
//        返回值:        无。
//////////////////////////////////////////////////////////////////////////
void AES_Decrypt(unsigned char *pPlainText, const unsigned char *pCipherText,
                                 unsigned int nDataLen, const unsigned char *pIV);




#endif  /* _TRACK_FUN_AES_H */
[/mw_shl_code]调用这两个函数就可以了?
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2013-8-23
在线时间
5 小时
 楼主| 发表于 2018-9-6 14:11:05 | 显示全部楼层
对啊,初始化后测试加密解密数据是否一一致就行了
我即狂澜,且无法被力挽
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2018-11-26
在线时间
13 小时
发表于 2019-1-25 16:17:31 | 显示全部楼层
AES_Encrypt(const unsigned char *pPlainText, unsigned char *pCipherText,  unsigned int nDataLen, const unsigned char *pIV)
void AES_Decrypt(unsigned char *pPlainText, const unsigned char *pCipherText,  unsigned int nDataLen, const unsigned char *pIV)
请问,这两个函数一次性最多可以加密多少个字节,我现在在测试,发现256个字节是没有问题的,如果是512个字节加密和解密就会出现问题
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-9-23
在线时间
14 小时
发表于 2019-9-24 14:13:39 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-8-7
在线时间
14 小时
发表于 2019-10-19 16:02:31 | 显示全部楼层
markmark
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-10-19 18:42:56 | 显示全部楼层
本帖最后由 nashui_sx 于 2019-10-19 19:05 编辑
yjxwyyve 发表于 2019-1-25 16:17
AES_Encrypt(const unsigned char *pPlainText, unsigned char *pCipherText,  unsigned int nDataLen, con ...

里面很多长度都是u8,可能有关系,不过应该不是这个问题
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2020-5-15
在线时间
40 小时
发表于 2020-6-17 14:12:56 | 显示全部楼层
还是没搞懂,还填充模式是什么呢  
这句buf[buf[1]+2] = HCGetCheckSum(buf, buf[1]+2); 又是什么意思呢
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-6-27
在线时间
4 小时
发表于 2020-6-18 09:22:42 | 显示全部楼层
请问这个怎么应用在自己的工程里,需要做什么改动?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-11-16
在线时间
2 小时
发表于 2020-6-27 17:32:07 | 显示全部楼层
多谢分享,是好东西。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-6-30
在线时间
1 小时
发表于 2020-7-1 11:03:55 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-11-26
在线时间
21 小时
发表于 2020-10-17 17:11:52 | 显示全部楼层
请问每次发送数据前都需要初始化吗?还是初始化一次就可以了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2018-4-28
在线时间
0 小时
发表于 2020-10-23 10:14:12 | 显示全部楼层
我测试:
1:ECB模式加密,
明文:@@0|1|01_NB_123##
秘钥:zxycloaa20160629
参数中长度32,结果在16个数据就是错的
回复 支持 反对

使用道具 举报

5

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
537
金钱
537
注册时间
2017-7-23
在线时间
57 小时
发表于 2020-11-23 10:18:29 | 显示全部楼层
测试一下,看看好不好用
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2019-5-19
在线时间
51 小时
发表于 2021-3-31 17:02:02 | 显示全部楼层
您好,这个怎么验证?用串口吗?
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2021-5-21
在线时间
27 小时
发表于 2021-11-5 11:52:42 | 显示全部楼层
感谢分享。。。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

高级会员

Rank: 4

积分
548
金钱
548
注册时间
2018-7-31
在线时间
59 小时
发表于 2022-10-14 15:53:55 | 显示全部楼层
感谢分享,直接添加到工程之后就可以调用,非常方便
回复 支持 反对

使用道具 举报

34

主题

94

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2022-4-8
在线时间
81 小时
发表于 2023-2-14 02:30:05 | 显示全部楼层
楼主,“AES.c”中第31行的“buf[buf[1]+2] = HCGetCheckSum(buf, buf[1]+2);”报错:“..\HARDWARE\AES\AES.c(44): error:  #20: identifier "cUart1RxData" is undefined”,如何解决?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表