#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 m_asks; std::vector m_answers; std::vector m_checkFeatures, m_allFeatures; // 计录状态 BIT_STATUS m_loginStatus; // 上次验证时间 LONGLONG m_Counters; // CPU频率 LONGLONG m_Frequency; // 上次登录时间 time_t m_loginTime; }; typedef Singleton g_BALock;