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

87 lines
1.5 KiB
C++

/*/////////////////////////////////////////////////////////////////////////
文件名: Encrypt.cpp
功能描述: 数据加解密的处理
创建人: xiaoql
创建时间: 2010年06月04日
/////////////////////////////////////////////////////////////////////////*/
//#include <Windows.h>
//#include "CRC.h"
#include "Encrypt.h"
#include <time.h>
#include "wrand.h"
void Encrypt::SetSelfSalt(unsigned int salt)
{
if (salt)
{
m_nSelfSalt = salt;
}
}
unsigned int Encrypt::GenSalt()
{
unsigned int salt =0;
//srand((int) time( NULL ) );
do
{
salt = (unsigned int) wrandvalue();
}while (! salt);
return salt;
}
void Encrypt::SetTargetSalt(unsigned int salt,bool isClient)
{
m_nTargetSalt =salt;
if (m_nSelfSalt ==0)
{
m_nSelfSalt =GenSalt();
}
GenKey(isClient);
}
//先随便使用一个加密算法进行数据加密
void Encrypt::GenKey(bool isClient)
{
if (m_nSelfSalt && m_nTargetSalt)
{
if(isClient)
{
m_nKey =( m_nSelfSalt ^ m_nTargetSalt) + m_nSelfSalt + 8654 ;
}
else
{
m_nKey =( m_nSelfSalt ^ m_nTargetSalt) + m_nTargetSalt + 8654 ;
}
*((PINT)m_sKeybuff) = m_nKey;
}
}
bool Encrypt::Encode(char *pInBuff,size_t len,char *pOutBuff)
{
if (m_nSelfSalt && m_nTargetSalt )
{
for (size_t i=0;i< len; i++)
{
pOutBuff[i] = pInBuff[i] ^ m_sKeybuff[i&3];
}
return true;
}
else
{
return false;
}
}
bool Encrypt::Decode(char *pInBuff,size_t len,char * pOutBuff)
{
//当前的加密算法和解密算法是一样的,反向操作
return Encode(pInBuff,len,pOutBuff);
}