// 密钥生成函数注册
#pragma pack(push, 1) // 强制1字节对齐
void CAPLEXPORT far CAPLPASCAL seedToKey(const uint8_t seed[4], uint8_t key[4]) { // 改为指针参数
//byte AppKeyConst[4] = { 0x7F, 0xE4, 0x75, 0x16 }; //密钥 VIUFL
//byte AppKeyConst[4] = { 0x71, 0xF9, 0x6C, 0x1D }; //密钥 EDC MCU 0x71F96C1D
//byte AppKeyConst[4] = { 0x5E, 0x6D, 0x3E, 0x5F }; //密钥 VIUFR 5E6D3E5F
//byte AppKeyConst[4] = { 0x7C, 0x32, 0x1B, 0x3D }; // 密钥 m_ADC 7C321B3D
//byte AppKeyConst[4] = { 0x7C, 0x32, 0x1B, 0x3D }; // 密钥 C3B 0x7C321B3D
//byte AppKeyConst[4] = { 0x95, 0x66, 0xB3, 0x76 }; // 0x95 66 B3 76
//byte AppKeyConst[4] = { 0x52, 0x71, 0x2B, 0x6F }; // ACC& FR is 0x52 71 2B 6F
//byte AppKeyConst[4] = { 0xAA, 0x23, 0x0B, 0x5B }; // LCDAL& BSD& LCDAR& RLR& RRR& FRR& FLR is 0xAA 23 0B 5B
byte AppKeyConst[4] = { 0x71, 0xF9, 0x6C, 0x1D };
byte Key1[4] = { 0 }, Key2[4] = { 0 }, Seed2[4] = { 0 };
uint32_t seed_value, reversed_value;
int i = 0;
uint32_t Key1_t, Key2_t, key_t;
// Step1: 合并Seed为32位整数(大端模式)
seed_value = (seed[0] << 24) | (seed[1] << 16) | (seed[2] << 8) | seed[3];
// Step2: 32位镜像反转生成Seed2
reversed_value = Reverse32Bits(seed_value);
Seed2[0] = (reversed_value >> 24) & 0xFF; // 高位在前
Seed2[1] = (reversed_value >> 16) & 0xFF;
Seed2[2] = (reversed_value >> 8) & 0xFF;
Seed2[3] = reversed_value & 0xFF;
// Step3: 计算Key1(Seed ^ AppKeyConst)
for (i = 0; i < 4; i++) {
Key1[i] = seed[i] ^ AppKeyConst[i];
}
// Step4: 计算Key2(Seed2 ^ AppKeyConst)
for (i = 0; i < 4; i++) {
Key2[i] = Seed2[i] ^ AppKeyConst[i];
}
Key1_t = (Key1[0] << 24) + (Key1[1] << 16) + (Key1[2] << 8) + Key1[3];
Key2_t = (Key2[0] << 24) + (Key2[1] << 16) + (Key2[2] << 8) + Key2[3];
key_t = Key1_t + Key2_t;
key[0] = (key_t & 0xff000000) >> 24;
key[1] = (key_t & 0x00ff0000) >> 16;
key[2] = (key_t & 0x0000ff00) >> 8;
key[3] = (key_t & 0x000000ff);
}
#pragma pack(pop) // 恢复默认对齐