汽车钥匙秘钥接收解码
最新推荐文章于 2025-03-01 16:43:20 发布
MUKAMO
最新推荐文章于 2025-03-01 16:43:20 发布
阅读量3.8k
收藏
17
点赞数
16
CC 4.0 BY-SA版权
分类专栏:
车身控制技术
文章标签:
PKE
RKE
加密算法
汽车BCM编程
汽车钥匙
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mukamo/article/details/71480054
本文档展示了汽车钥匙解码的过程,包括定义的常量、加密算法、解密函数和中断处理。主要使用了ROTL和ROTR位操作,以及特定的密钥和数据处理流程,以解码和验证汽车钥匙的序列号和同步码。
摘要生成于
C知道
,由 DeepSeek-R1 满血版支持,
前往体验 >
#include
"MCUinit.h"
#include
#define w
16
#define r
12
#define b
8
#define t
26
//2*r+2=12*2+2
#define c
4
//b*8/w = 16*8/32
#define ROTL(x,y) (((x)<<(y&(w-1))) | ((x)>>(w-(y&(w-1)))))
#define ROTR(x,y) (((x)>>(y&(w-1))) | ((x)<<(w-(y&(w-1)))))
const unsigned int
PW = 0xb7e1;
//0xb7e15163;
const unsigned int
QW = 0x9e37;
//0x9e3779b9;
const unsigned int
SKey_A[t]={0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222};
//@0x
;
//工厂密钥
unsigned int
SKey_B[t]={0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222};
//@0x
;
//产品密钥
#define EnableInterrupts {_asm ("RIM");}
#define DisableInterrupts {_asm ("SIM");}
void RX_SHIFT(void);
#define
R_EDGE_INT
EICR=0x08; //定义端口下降沿中断
#define
R_F_EDGE_INT
EICR=0x18; //端口bb反极性中断
#define
TB_OCINT_DISABLE
TBCR1 &= 0xBF; //:B时钟输出 比较中断禁止
#define
TB_OCINT_ENABLE
TBCR1 |= 0x40; //:B时钟输出比较中断允许
#define
TB_OVFINT_DISABLE
TBCR1 &= 0xDF; //B:时钟溢出中断禁止
#define
TB_OVFINT_ENABLE
TBCR1 |= 0x20; //:B时钟溢出中断允许
#define
ENABLE_RX_INT
PAOR |= 0x08; //:允许外部端口中断
#define
DISABLE_RX_INT
PAOR &= 0xf7; //:禁止外部A端口中断
#define
H_REPEAT
1
#define
H_LEARN
8
#define
Fail
0
#define
Okay
1
unsigned int RX_BUFFER[5], Header[3];
//unsigned int RX_FIFO[3][5];
unsigned int RX_FIFO_0[5], RX_FIFO_1[5], RX_FIFO_2[5], FEC_DATA[5];
unsigned char RX_BUF_CNT;
//,RX_STATUS;
unsigned int RX_TW1, RX_TW2, RX_TW3, RX_TW4;
unsigned int BIT_CYCLE;
unsigned char PREAMBLER_CNT, RX_BIT_CNT;
unsigned int BPS_DATA, BPS_DATA_SUM;
unsigned char RX_FLAG, RX_STEP, RX_ERR_CNT=0;
unsigned char FIFO_Cnt=0;
unsigned char gStatus;
unsigned long RX_SerialNum, ROM_SerialNum;
unsigned char Cmd_Code;
unsigned int RX_Sync_Code,LAST_RX_sync_Code,ROM_Sync_Code;
unsigned int A_Code[2], B_Code[2];
//bool
RX_PIN
@PADR:3;
// FUNCTION DECLARE
void DECRYPT(unsigned int* In,unsigned int* Out,unsigned int* S);
void FIFO_1_3_FEC(void);
unsigned char HEADER_1_3_FEC(unsigned int *idata);
unsigned char DECODE_PROC(unsigned int