关于加减密 xor 等 加强防破解!!!!!
我编写一软件用 xor 或者其他方法 加减密 一些文字;那如果软件被人拿去了;会不会容易被解密出来?
怎么样才能避免被破解?
[解决办法]
关键的关键是看有没有人对你的程序感兴趣,如果不敢兴趣,需要花钱找人破,如果感兴趣,花钱也挡不住破解
[解决办法]
// 加密一段字符串
// inBuffer : 传入明文 /*IN*/
// outBuffer: 输出密文 /*OUT*/
// inLen: 明文长度 /*IN*/
// outLen:密文长度 /*OUT*/
BOOL Encrypt( const unsigned char * inBuffer ,
unsigned char * outBuffer ,
int inLen ,
int & outLen )
{
if( outLen < inLen )
return FALSE;
int nFlag = 0 , i = 0;
register unsigned long lValue= m_key.lValue;
for( i = 0 ; i <= inLen - 4 ; i += 4 )
{
register unsigned char cTemp = m_key.mFlag[ nFlag ];
__asm
{
mov edx , inBuffer
mov eax , [edx]
mov cl , cTemp
ror eax , cl
xor eax , lValue
mov edx , outBuffer
mov [edx] , eax
}
nFlag ++;
nFlag %= 4;
inBuffer += 4;
outBuffer += 4;
}
if( i < inLen )
{
if( ROUND_UP_4BYTES )
{
// 不足4字节补齐
unsigned long lTemp = 0;
memcpy( &lTemp , &inBuffer[i] , inLen - i );
i+= 4;
if( outLen < i )
return FALSE;
register unsigned char cTemp = m_key.mFlag[ nFlag ];
__asm
{
mov edx , inBuffer
mov eax , [edx]
mov cl , cTemp
ror eax , cl
xor eax , lValue
mov edx , outBuffer
mov [edx] , eax
}
}else
{
// 不圆整就1字节移位异或
for( int j = i ; j < inLen ; j ++ )
{
register unsigned char cTemp = m_key.mFlag[ j-i ];
__asm
{
mov edx , inBuffer
mov al , [edx]
mov cl , cTemp
ror al , cl
xor al , cTemp
mov edx , outBuffer
mov [edx] , al
}
++inBuffer;
++outBuffer;
}
i = inLen;
}
}
outLen = i;
return TRUE;
}
// 解密一段字符串
// inBuffer : 传入密文 /*IN*/
// outBuffer: 输出明文 /*OUT*/
// inLen: 密文长度 /*IN*/
// outLen:明文长度 /*OUT*/
BOOL Decrypt( const unsigned char * inBuffer ,
unsigned char * outBuffer ,
int inLen ,
int & outLen )
{
if( outLen < inLen )
return FALSE;
int nFlag = 0;
int i;
register unsigned long lValue= m_key.lValue;
for( i = 0 ; i <= inLen - 4 ; i += 4 )
{
register unsigned char cTemp = m_key.mFlag[ nFlag ];
__asm
{
mov edx , inBuffer
mov eax , [edx]
xor eax , lValue
mov cl , cTemp
rol eax , cl
mov edx , outBuffer
mov [edx] , eax
}
outBuffer += 4;
inBuffer += 4;
nFlag ++;
nFlag %= 4;
}
if( i != inLen )
{
if( ROUND_UP_4BYTES )
return FALSE;
else
{
// 不圆整就1字节移位异或
for( int j = i ; j < inLen ; j ++ )
{
register unsigned char cTemp = m_key.mFlag[ j-i ];
__asm
{
mov edx , inBuffer
mov al , [edx]
mov cl ,cTemp
xor al , cl
rol al , cl
mov edx , outBuffer
mov [edx] , al
}
++inBuffer;
++outBuffer;
}
}
}
outLen = inLen;
return TRUE;
}