Files
envi-code/SourceCode/Code2026/inc/encryption.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

269 lines
4.7 KiB
C++

#pragma once
#include "tchar.h"
#include "bitanswercpp.h"
#include "singleton.h"
#ifndef NDEBUG
//#define WF2020
//#define WF2021
//#define LOCAL
//#define REMOTE
#endif
// 预编译宏说明
/*
WF2020/WF2021 代表了包含版本的产品类型,由此来决定了feature id的类型和数量
1.WF2020 - 污水处理 2020
feature id : 1, 3, 4, 5, 6, 7
2.WF2021 - 污水处理 2021
feature id : 2, 8, 9, 10, 11, 12
3.WF2023 - 污水处理 2023 V5.0
feature id : 3, 4, 5, 17
4.RUP2023 - 速建 2023 V1.0
feature id : 6, 7, 18
LOCAL/REMOTE 代表了验证类型
1.LOCAL - 本地加密锁 (单机浮动)
2.REMOTE - 远程加密锁 (集团授权)
*/
class Ask
{
public:
Ask() {}
virtual ~Ask() {}
public:
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4) = 0;
};
class Answer
{
public:
Answer() {}
virtual ~Answer() {}
public:
virtual bool get(const int &idx, BIT_UINT32 &result) = 0;
};
#pragma region encrypt data
class Ask3: public Ask
{
public:
Ask3() {}
~Ask3() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask4: public Ask
{
public:
Ask4() {}
~Ask4() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask5: public Ask
{
public:
Ask5() {}
~Ask5() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask6: public Ask
{
public:
Ask6() {}
~Ask6() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask7: public Ask
{
public:
Ask7() {}
~Ask7() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask8: public Ask
{
public:
Ask8() {}
~Ask8() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask9: public Ask
{
public:
Ask9() {}
~Ask9() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask10: public Ask
{
public:
Ask10() {}
~Ask10() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask11: public Ask
{
public:
Ask11() {}
~Ask11() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Ask12: public Ask
{
public:
Ask12() {}
~Ask12() {}
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
};
class Answer3: public Answer
{
public:
Answer3() {}
~Answer3() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer4: public Answer
{
public:
Answer4() {}
~Answer4() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer5: public Answer
{
public:
Answer5() {}
~Answer5() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer6: public Answer
{
public:
Answer6() {}
~Answer6() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer7: public Answer
{
public:
Answer7() {}
~Answer7() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer8: public Answer
{
public:
Answer8() {}
~Answer8() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer9: public Answer
{
public:
Answer9() {}
~Answer9() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer10: public Answer
{
public:
Answer10() {}
~Answer10() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer11: public Answer
{
public:
Answer11() {}
~Answer11() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
class Answer12: public Answer
{
public:
Answer12() {}
~Answer12() {}
virtual bool get(const int &idx, BIT_UINT32 &result);
};
#pragma endregion encrypt data
class CDrawEntity
{
public:
CDrawEntity();
~CDrawEntity();
// login
BIT_STATUS DrawBegin();
//logout
void DrawEnd(bool recordTime);
// check
BIT_STATUS Draw();
// 借出
void checkoutSn(int nDay);
// 还回
void checkinSn();
// 得到当前已经连接上的加密方式
_LOGIN_MODE getRealLockMode();
private:
void generateIdx();
LONGLONG getCurrentCounter();
bool IsBitAnswerLock();
_LOGIN_MODE getBitAnswerLockMode();
private:
// 随机特征项的索引
int m_idxFeature;
// 随机计算因子索引
int m_idxFactor;
CBitAnswer m_BitLock;
std::vector<Ask *> m_asks;
std::vector<Answer *> m_answers;
std::vector<int> m_checkFeatures, m_allFeatures;
// 计录状态
BIT_STATUS m_loginStatus;
// 上次验证时间
LONGLONG m_Counters;
// CPU频率
LONGLONG m_Frequency;
// 上次登录时间
time_t m_loginTime;
};
typedef Singleton<CDrawEntity> g_BALock;