软件加密OK
This commit is contained in:
parent
b3d26b0969
commit
9273828134
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
|
||||
|
||||
#define K_128 0xA12EE1FE
|
||||
// 延时REV_MUTE_DELAY us启动ADC采集数据
|
||||
// 最大风速30m/s 2.5M 采样率 延时260uS
|
||||
#define REV_MUTE_DELAY_US 174
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
#include "comm_types.h"
|
||||
#include "stm32l4xx_hal.h"
|
||||
#include "inflash.h"
|
||||
#include "anemometer_dev.h"
|
||||
#include "frt_protocol.h"
|
||||
|
||||
#define K_64 0x9B45824A
|
||||
|
||||
uint8_t JudgeEncrypt();
|
||||
|
||||
|
|
|
@ -140,6 +140,8 @@ typedef struct _FRT_RegProcTable_s{
|
|||
void read_and_process_uart_data(device_handle uart_handle);
|
||||
#pragma pack(pop)
|
||||
|
||||
extern uint32_t K_96;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -31,6 +31,14 @@ typedef struct _usr_config_info{
|
|||
u_int16_t uart_baud; /* 串口波特率 */
|
||||
u_int16_t speed_average_time; /* 风速平均时间 */
|
||||
u_int16_t temp_hum_update_time; /* 温湿度平均时间 */
|
||||
u_int16_t temp0; /* 占位留待升级 */
|
||||
u_int16_t temp1; /* 占位留待升级 */
|
||||
u_int16_t temp2; /* 占位留待升级 */
|
||||
u_int16_t temp3; /* 占位留待升级 */
|
||||
u_int16_t temp4; /* 占位留待升级 */
|
||||
u_int16_t temp5; /* 占位留待升级 */
|
||||
u_int16_t temp6; /* 占位留待升级 */
|
||||
u_int16_t temp7; /* 占位留待升级 */
|
||||
u_int8_t flag_end;
|
||||
}usr_config_info;
|
||||
|
||||
|
@ -57,6 +65,16 @@ typedef struct _factory_config_info{
|
|||
u_int16_t linear_point_5_y; /* 线性插值点5Y */
|
||||
u_int16_t linear_enable; /* 线性插值使能 */
|
||||
u_int32_t encrypt_1; /* 后32位密文 */
|
||||
u_int16_t temp0; /* 占位留待升级 */
|
||||
u_int16_t temp1; /* 占位留待升级 */
|
||||
u_int16_t temp2; /* 占位留待升级 */
|
||||
u_int16_t temp3; /* 占位留待升级 */
|
||||
u_int16_t temp4; /* 占位留待升级 */
|
||||
u_int16_t temp5; /* 占位留待升级 */
|
||||
u_int16_t temp6; /* 占位留待升级 */
|
||||
u_int16_t temp7; /* 占位留待升级 */
|
||||
u_int16_t temp8; /* 占位留待升级 */
|
||||
u_int16_t temp9; /* 占位留待升级 */
|
||||
u_int8_t flag_end;
|
||||
}factory_config_info;
|
||||
#pragma pack(pop)
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "hp203b.h"
|
||||
#include "FIR.h"
|
||||
#include "LowPassFilter.h"
|
||||
#include "encrypt.h"
|
||||
|
||||
#define AVE_TIME 600 //滑动平均时间,秒,最大600
|
||||
#define COVER_TINE 10 //探头遮挡后导致的接收次数过小的报错临界次数
|
||||
|
@ -461,6 +462,8 @@ char str[100];
|
|||
|
||||
void wind_task(void const * argument)
|
||||
{
|
||||
//软件加密校验
|
||||
uint8_t wind_check_flag = JudgeEncrypt();
|
||||
// 最大幅值
|
||||
uint16_t wave_max_val1;
|
||||
uint16_t wave_max_val2;
|
||||
|
@ -478,6 +481,11 @@ void wind_task(void const * argument)
|
|||
initLowPassFilter(&low_pass_filter_y, LOW_PASS_ALPHA);
|
||||
for(;;)
|
||||
{
|
||||
if(!wind_check_flag)
|
||||
{
|
||||
osDelay(1000);
|
||||
continue;
|
||||
}
|
||||
__HAL_TIM_DISABLE(&htim16);
|
||||
// 采集X轴风速耗时 22ms,两轴采集完44ms
|
||||
__HAL_TIM_SET_COUNTER(&htim16,0);
|
||||
|
@ -1052,10 +1060,13 @@ void my_update_mcs_param(float new_wind_speed, float new_wind_dirction)
|
|||
win_10min.index = (win_10min.index + 1) % g_usrConfigInfo.speed_average_time;//更新索引
|
||||
}
|
||||
|
||||
|
||||
void tem_hum_update_task(void const * argument)
|
||||
{
|
||||
int time_s_temp_humi = 0;
|
||||
uint32_t time_s_1Day = 0;
|
||||
uint8_t tem_hun_check_flag = JudgeEncrypt();
|
||||
|
||||
uint16_t time_s_temp_humi = 0;//1秒计时,温湿度更新
|
||||
uint32_t time_s_1Day = 0;//1天的秒数
|
||||
|
||||
float backupTemperature;
|
||||
|
||||
|
@ -1080,6 +1091,7 @@ void tem_hum_update_task(void const * argument)
|
|||
while(1)
|
||||
{
|
||||
osDelay(1000);
|
||||
if(!tem_hun_check_flag)continue;
|
||||
time_s_temp_humi ++;
|
||||
time_s_1Day ++;
|
||||
// 温湿度大气压更新
|
||||
|
|
|
@ -1,32 +1,11 @@
|
|||
#include "encrypt.h"
|
||||
|
||||
/* TEA加密算法的加密过程 */
|
||||
void tea_encrypt(uint32_t *en, uint32_t *k)
|
||||
{
|
||||
uint32_t v[2];
|
||||
v[0] = *(uint32_t*)(0x1FFF7590);
|
||||
v[1] = *(uint32_t*)(0x1FFF7590 + 4);
|
||||
uint32_t v0 = v[0], v1 = v[1], sum = 0, i; // 初始化v0, v1, sum
|
||||
uint32_t delta = 0x9e3779b9; // 初始化delta
|
||||
uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // 初始化密钥k
|
||||
for (i = 0; i < 32; i++) { // 执行32轮加密
|
||||
sum += delta;
|
||||
v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
|
||||
v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
|
||||
}
|
||||
en[0] = v0; // 返回加密结果
|
||||
en[1] = v1;
|
||||
|
||||
// term_printf("%x %x", v[0], v[1]);
|
||||
}
|
||||
|
||||
/* TEA加密算法的解密过程 */
|
||||
void tea_decrypt(uint32_t *v, uint32_t *k)
|
||||
static void tea_decrypt(uint32_t *v, uint32_t *k)
|
||||
{
|
||||
uint32_t delta = 0x9e3779b9; // 初始化delta
|
||||
// uint32_t v0 = 0x93ae5ba8, v1 = 0xc5ba4e82, sum = delta << 5, i; // 初始化v0, v1, sum
|
||||
uint32_t v0 = g_stConfigInfo.encrypt_0, v1 = g_stConfigInfo.encrypt_1, sum = delta << 5, i; // 初始化v0, v1, sum
|
||||
uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // 初始化密钥k
|
||||
uint32_t k3 = k[3] ^ k[0], k2 = (k[2] ^ (*(uint32_t*)(0x1FFF7590))), k1 = k[1] ^ k[0], k0 = k[0] ^ (*(uint32_t*)(0x1FFF7590 + 4)); // 反算密钥
|
||||
for(i = 0; i < 32; i++) { // 执行32轮解密
|
||||
v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
|
||||
v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
|
||||
|
@ -45,7 +24,8 @@ void tea_decrypt(uint32_t *v, uint32_t *k)
|
|||
uint8_t JudgeEncrypt()
|
||||
{
|
||||
uint32_t encryptCode[2] = {0};
|
||||
uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, 0x7d729015}; //密钥可能要打散位置,不在这里定死
|
||||
// uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, ID中间32位}; //
|
||||
uint32_t key[] = {(K_128 >> 1) ^ (*(uint32_t*)(0x1FFF7590 + 4)), (K_96 >> 2) ^ key[0], (K_64 >>1) ^ (*(uint32_t*)(0x1FFF7590)), (*(uint32_t*)(0x1FFF7590 + 4)) ^ key[0]};
|
||||
tea_decrypt(encryptCode, key);
|
||||
return ((*(uint32_t*)(0x1FFF7590)) == encryptCode[0] && (*(uint32_t*)(0x1FFF7590 + 4)) == encryptCode[1]);
|
||||
}
|
|
@ -1536,6 +1536,7 @@ void FRT_MsgHandler(device_handle device, u_int8_t *pMsg, u_int32_t MsgLen)
|
|||
* @param
|
||||
* @retval
|
||||
*/
|
||||
uint32_t K_96 = 0xA71ACDA4;
|
||||
static u_int8_t rs485_buff[50]={0x00};
|
||||
void read_and_process_uart_data(device_handle device)
|
||||
{
|
||||
|
|
|
@ -192,10 +192,14 @@ void LEDTask(void const * argument)
|
|||
{
|
||||
/* USER CODE BEGIN StartDefaultTask */
|
||||
/* Infinite loop */
|
||||
uint8_t LED_Check_flag = JudgeEncrypt();
|
||||
for(;;)
|
||||
{
|
||||
osDelay(1000);
|
||||
if(LED_Check_flag)
|
||||
{
|
||||
HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin);
|
||||
}
|
||||
}
|
||||
/* USER CODE END StartDefaultTask */
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue