CH573硬件AES解密的例程

您好,能否提供下 CH573 硬件 AES 解密的例子,升級(jí)固件解密的時(shí)候需要用到。

你好,lib庫里面有加解密函數(shù),周一會(huì)將具體函數(shù)名稱貼上來。


好的,期待


你好,函數(shù)名稱可見截圖:

image.png


是aes的啥算法 密鑰長度多少啊?


ch57x 硬件AES 加解密

基于CH57x系列ble的庫,暫時(shí)只支持AES128-ECB模式


使用


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int i = 0;
// 加密秘鑰 16個(gè)字節(jié)也就是128 bit
uint8 key[16] = {0X00,0X11,0X22,0X33,0X44,0X55,0X66,0X77,0X88,0X99,0XAA,0XBB,0XCC,0XDD,0XEE,0XFF};
?????
// 需要加密的數(shù)據(jù)(保證16個(gè)字節(jié),不夠的自己填充)
uint8 source_buf[16] = {0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A,0X0B,0X0C,0X0D,0X0E,0X0F};
??
// 加密后數(shù)據(jù)存放區(qū)
uint8 encrypted_buf[16];
??
// 解密后數(shù)據(jù)存放區(qū)
uint8 deccrypted_buf[16];
??
// 開始加密,加密后的數(shù)據(jù)存放到encrypted_buf,
LL_Encrypt( key, source_buf, encrypted_buf );
??
// 開始解密,將解密后的數(shù)據(jù)存到deccrypted_buf,ch579 11us
LL_Decrypt( key, encrypted_buf, deccrypted_buf );??
?????
?????
//打印原始數(shù)據(jù)
PRINT("source:");
for(i = 0;i < 16;i++) {
????PRINT("0x%02x ",source_buf[i]);
}
PRINT("\r\n");
//打印加密后的數(shù)據(jù)
PRINT("encrypte:");
for(i = 0;i < 16;i++) {
????PRINT("0x%02x ",encrypted_buf[i]);
}
PRINT("\r\n");
//打印解密后的數(shù)據(jù)
PRINT("deccrypte:");
for(i = 0;i < 16;i++) {
????PRINT("0x%02x ",deccrypted_buf[i]);
}
PRINT("\r\n");

運(yùn)行結(jié)果:

1
2
3
source:0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
encrypte:0x27 0x9f 0xb7 0x4a 0x75 0x72 0x13 0x5e 0x8f 0x9b 0x8e 0xf6 0xd1 0xee 0xe0 0x03
deccrypte:0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f


在python 中驗(yàn)證


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
?
def ToHexStr(data):
????if type(data) == type([1,]):
????????bytes_data = ToBytes(data)
????????return bytes_data.hex()
????elif type(data) == type(b'\x00'):
????????return data.hex()???
????else:
????????print("only 'list' or 'bytes' is valid!")
????????return None
?????
# 要加密的內(nèi)容
data = bytes([0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A,0X0B,0X0C,0X0D,0X0E,0X0F])
# 密鑰
key = bytes([0X00,0X11,0X22,0X33,0X44,0X55,0X66,0X77,0X88,0X99,0XAA,0XBB,0XCC,0XDD,0XEE,0XFF])
?
print("要加密的數(shù)據(jù):")
print(ToHexStr(data))
print("加密后的密鑰:")
print(ToHexStr(key))
?
# 實(shí)例化加密套件,使用ECB模式
cipher = AES.new(key, AES.MODE_ECB)
?
#加密
encrypted_data = cipher.encrypt(data)
print("加密后的數(shù)據(jù):")
print(ToHexStr(encrypted_data))
?
#解密
decrypted_data = cipher.decrypt(encrypted_data)
print("解密后的數(shù)據(jù):")
print(ToHexStr(decrypted_data))

結(jié)果:

1
2
3
4
5
6
7
8
9
======================================= RESTART: F:\wch\CH579EVT_2.2\hex_edit\aes_test.py ======================================
要加密的數(shù)據(jù):
000102030405060708090a0b0c0d0e0f
加密后的密鑰:
00112233445566778899aabbccddeeff
加密后的數(shù)據(jù):
279fb74a7572135e8f9b8ef6d1eee003
解密后的數(shù)據(jù):
000102030405060708090a0b0c0d0e0f



ECB是不是安全性差了點(diǎn)。。。


@tech46??

int i = 0;
// 加密秘鑰 16個(gè)字節(jié)也就是128 bit
uint8 key[16] = {0X00,0X11,0X22,0X33,0X44,0X55,0X66,0X77,0X88,0X99,0XAA,0XBB,0XCC,0XDD,0XEE,0XFF};
?????
// 需要加密的數(shù)據(jù)(保證16個(gè)字節(jié),不夠的自己填充)
uint8 source_buf[16] = {0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A,0X0B,0X0C,0X0D,0X0E,0X0F};
??
// 加密后數(shù)據(jù)存放區(qū)
uint8 encrypted_buf[16];
??
// 解密后數(shù)據(jù)存放區(qū)
uint8 deccrypted_buf[16];
??
// 開始加密,加密后的數(shù)據(jù)存放到encrypted_buf,
LL_Encrypt( key, source_buf, encrypted_buf );
??
// 開始解密,將解密后的數(shù)據(jù)存到deccrypted_buf,ch579 11us
LL_Decrypt( key, encrypted_buf, deccrypted_buf );??
?????
?????
//打印原始數(shù)據(jù)
PRINT("source:");
for(i = 0;i < 16;i++) {
????PRINT("0x%02x ",source_buf[i]);
}
PRINT("\r\n");
//打印加密后的數(shù)據(jù)
PRINT("encrypte:");
for(i = 0;i < 16;i++) {
????PRINT("0x%02x ",encrypted_buf[i]);
}
PRINT("\r\n");
//打印解密后的數(shù)據(jù)
PRINT("deccrypte:");
for(i = 0;i < 16;i++) {
????PRINT("0x%02x ",deccrypted_buf[i]);
}
PRINT("\r\n");


ch573實(shí)測(cè)執(zhí)行LL_Encrypt后得出結(jié)果全部為0x00....???


還是要在加密解密前做一些硬件初始化嗎?


CH57x系列AES 模塊在RF收發(fā)器部分.

在運(yùn)行該模塊前,需要保證無線相關(guān)的函數(shù)初始化,

比如藍(lán)牙的工程中,一定要在藍(lán)牙初始化完成后才能調(diào)用.


沒有一個(gè)完整的例程嗎?真麻煩,服了這些資料


后續(xù)會(huì)考慮進(jìn)行完善,如有相應(yīng)程序提供,會(huì)提醒用戶更新,目前使用上面工程師提供的方案進(jìn)行參考即可。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频