软件加密OK
This commit is contained in:
parent
b3d26b0969
commit
9273828134
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define K_128 0xA12EE1FE
|
||||||
// 延时REV_MUTE_DELAY us启动ADC采集数据
|
// 延时REV_MUTE_DELAY us启动ADC采集数据
|
||||||
// 最大风速30m/s 2.5M 采样率 延时260uS
|
// 最大风速30m/s 2.5M 采样率 延时260uS
|
||||||
#define REV_MUTE_DELAY_US 174
|
#define REV_MUTE_DELAY_US 174
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
#include "comm_types.h"
|
#include "comm_types.h"
|
||||||
#include "stm32l4xx_hal.h"
|
#include "stm32l4xx_hal.h"
|
||||||
#include "inflash.h"
|
#include "inflash.h"
|
||||||
|
#include "anemometer_dev.h"
|
||||||
|
#include "frt_protocol.h"
|
||||||
|
|
||||||
|
#define K_64 0x9B45824A
|
||||||
|
|
||||||
uint8_t JudgeEncrypt();
|
uint8_t JudgeEncrypt();
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,8 @@ typedef struct _FRT_RegProcTable_s{
|
||||||
void read_and_process_uart_data(device_handle uart_handle);
|
void read_and_process_uart_data(device_handle uart_handle);
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
extern uint32_t K_96;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -31,6 +31,14 @@ typedef struct _usr_config_info{
|
||||||
u_int16_t uart_baud; /* 串口波特率 */
|
u_int16_t uart_baud; /* 串口波特率 */
|
||||||
u_int16_t speed_average_time; /* 风速平均时间 */
|
u_int16_t speed_average_time; /* 风速平均时间 */
|
||||||
u_int16_t temp_hum_update_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;
|
u_int8_t flag_end;
|
||||||
}usr_config_info;
|
}usr_config_info;
|
||||||
|
|
||||||
|
@ -57,6 +65,16 @@ typedef struct _factory_config_info{
|
||||||
u_int16_t linear_point_5_y; /* 线性插值点5Y */
|
u_int16_t linear_point_5_y; /* 线性插值点5Y */
|
||||||
u_int16_t linear_enable; /* 线性插值使能 */
|
u_int16_t linear_enable; /* 线性插值使能 */
|
||||||
u_int32_t encrypt_1; /* 后32位密文 */
|
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;
|
u_int8_t flag_end;
|
||||||
}factory_config_info;
|
}factory_config_info;
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "hp203b.h"
|
#include "hp203b.h"
|
||||||
#include "FIR.h"
|
#include "FIR.h"
|
||||||
#include "LowPassFilter.h"
|
#include "LowPassFilter.h"
|
||||||
|
#include "encrypt.h"
|
||||||
|
|
||||||
#define AVE_TIME 600 //滑动平均时间,秒,最大600
|
#define AVE_TIME 600 //滑动平均时间,秒,最大600
|
||||||
#define COVER_TINE 10 //探头遮挡后导致的接收次数过小的报错临界次数
|
#define COVER_TINE 10 //探头遮挡后导致的接收次数过小的报错临界次数
|
||||||
|
@ -461,6 +462,8 @@ char str[100];
|
||||||
|
|
||||||
void wind_task(void const * argument)
|
void wind_task(void const * argument)
|
||||||
{
|
{
|
||||||
|
//软件加密校验
|
||||||
|
uint8_t wind_check_flag = JudgeEncrypt();
|
||||||
// 最大幅值
|
// 最大幅值
|
||||||
uint16_t wave_max_val1;
|
uint16_t wave_max_val1;
|
||||||
uint16_t wave_max_val2;
|
uint16_t wave_max_val2;
|
||||||
|
@ -478,6 +481,11 @@ void wind_task(void const * argument)
|
||||||
initLowPassFilter(&low_pass_filter_y, LOW_PASS_ALPHA);
|
initLowPassFilter(&low_pass_filter_y, LOW_PASS_ALPHA);
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
|
if(!wind_check_flag)
|
||||||
|
{
|
||||||
|
osDelay(1000);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
__HAL_TIM_DISABLE(&htim16);
|
__HAL_TIM_DISABLE(&htim16);
|
||||||
// 采集X轴风速耗时 22ms,两轴采集完44ms
|
// 采集X轴风速耗时 22ms,两轴采集完44ms
|
||||||
__HAL_TIM_SET_COUNTER(&htim16,0);
|
__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;//更新索引
|
win_10min.index = (win_10min.index + 1) % g_usrConfigInfo.speed_average_time;//更新索引
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void tem_hum_update_task(void const * argument)
|
void tem_hum_update_task(void const * argument)
|
||||||
{
|
{
|
||||||
int time_s_temp_humi = 0;
|
uint8_t tem_hun_check_flag = JudgeEncrypt();
|
||||||
uint32_t time_s_1Day = 0;
|
|
||||||
|
uint16_t time_s_temp_humi = 0;//1秒计时,温湿度更新
|
||||||
|
uint32_t time_s_1Day = 0;//1天的秒数
|
||||||
|
|
||||||
float backupTemperature;
|
float backupTemperature;
|
||||||
|
|
||||||
|
@ -1080,6 +1091,7 @@ void tem_hum_update_task(void const * argument)
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
osDelay(1000);
|
osDelay(1000);
|
||||||
|
if(!tem_hun_check_flag)continue;
|
||||||
time_s_temp_humi ++;
|
time_s_temp_humi ++;
|
||||||
time_s_1Day ++;
|
time_s_1Day ++;
|
||||||
// 温湿度大气压更新
|
// 温湿度大气压更新
|
||||||
|
|
|
@ -1,32 +1,11 @@
|
||||||
#include "encrypt.h"
|
#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加密算法的解密过程 */
|
/* 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 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 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轮解密
|
for(i = 0; i < 32; i++) { // 执行32轮解密
|
||||||
v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
|
v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
|
||||||
v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
|
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()
|
uint8_t JudgeEncrypt()
|
||||||
{
|
{
|
||||||
uint32_t encryptCode[2] = {0};
|
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);
|
tea_decrypt(encryptCode, key);
|
||||||
return ((*(uint32_t*)(0x1FFF7590)) == encryptCode[0] && (*(uint32_t*)(0x1FFF7590 + 4)) == encryptCode[1]);
|
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
|
* @param
|
||||||
* @retval
|
* @retval
|
||||||
*/
|
*/
|
||||||
|
uint32_t K_96 = 0xA71ACDA4;
|
||||||
static u_int8_t rs485_buff[50]={0x00};
|
static u_int8_t rs485_buff[50]={0x00};
|
||||||
void read_and_process_uart_data(device_handle device)
|
void read_and_process_uart_data(device_handle device)
|
||||||
{
|
{
|
||||||
|
|
|
@ -192,10 +192,14 @@ void LEDTask(void const * argument)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN StartDefaultTask */
|
/* USER CODE BEGIN StartDefaultTask */
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
|
uint8_t LED_Check_flag = JudgeEncrypt();
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
osDelay(1000);
|
osDelay(1000);
|
||||||
|
if(LED_Check_flag)
|
||||||
|
{
|
||||||
HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin);
|
HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* USER CODE END StartDefaultTask */
|
/* USER CODE END StartDefaultTask */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue