Files
mir_server/sdk/utils/Encrypt.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

80 lines
1.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <string.h>
#include "_osdef.h"
#include "CRC16.h"
class Encrypt
{
public:
Encrypt()
{
Reset();
}
//重置
inline void Reset()
{
memset(this,0,sizeof(*this));
}
void SetSelfSalt(unsigned int salt); //设置自己的随机数
/*
* Comments: 设置目标的key
* Parameter: unsigned int salt:目标的salt
* Parameter: bool isClient:自身是作为客户端还是服务器使用了不对称的key生成算法
* @Return void:
*/
void SetTargetSalt(unsigned int salt,bool isClient=false); //设置通信方的随机数,同时会生成key
unsigned int GetSelfSalt(){return m_nSelfSalt;} //获取自身的随机数
unsigned int GetTargetSalt() {return m_nTargetSalt; } //获取目标的随机数
bool Encode( char *pInBuff,size_t len,char *pOutBuff ); //加密数据
bool Decode( char *pInBuff,size_t len,char *pOutBuff ); //解密数据
inline bool IsKeyCrcCorrect( WORD nKeyCRC) //
{
return (GetKeyCRC()== nKeyCRC);
}
inline static UINT_PTR CRC16(LPCVOID lpBuffer, size_t len) //计算CRC-16的Checksum
{
return CRC16Calc((unsigned char *)lpBuffer,len);
}
inline unsigned int GetKey()
{
return m_nKey;
}
WORD GetKeyCRC() //获取key的crc值
{
return (CRC16(m_sKeybuff,4) & 0xffff);
}
unsigned int GenSalt(); // 产生salt
//增长checksum
inline void IncreaseCheckSum()
{
m_wCheckSum += 1;
}
inline WORD GetCheckSum()
{
return m_wCheckSum;
}
private:
void GenKey(bool isClient=false); //产生密钥
private:
unsigned int m_nSelfSalt; //自己产生的随机数
unsigned int m_nTargetSalt; //通信方的随机数
unsigned int m_nKey; //密钥
unsigned char m_sKeybuff[4] ; //密钥的buff添加这个为了方便计算
WORD m_wCheckSum; //一个数,自增长的,用于防止重复发包
};