是一游戲的代碼,已有登入解密通信代碼,如下:
void CEncode_Decode::Encode_Decode(WORD nLen, LPBYTE lpSource,LPBYTE lpTarget, bool bSend)
{
BYTE l_BYTE_Xor1 = nLen * D_WORD_XOR1MUL, l_BYTE_Xor3;
WORD l_WORD_Xor3 = D_WORD_XOR3BASE, nCir;
if (bSend)
{
l_BYTE_Xor1*=0x00AA;
l_WORD_Xor3*=0x00BB;
}
for (nCir=0; nCir<nLen; nCir++)
{
l_BYTE_Xor3 = HIBYTE(l_WORD_Xor3);
lpTarget[nCir] = lpSource[nCir] ^ l_BYTE_Xor1 ^ G_BYTE_XorTable[nCir % D_XORTABLE_LENGTH] ^ l_BYTE_Xor3;
l_WORD_Xor3 *= D_WORD_XOR3MUL;
}
}
通過這個解密代碼,怎么寫加密代碼呢?
uj5u.com熱心網友回復:
這還需要寫嗎?就是簡單的異或而已,直接再呼叫一次就是了。第一次輸入source,得到的target是加密過的;第二次把target當source輸入,出來的就是原來的source了啊
uj5u.com熱心網友回復:
原型例子,void USER::Encode_Decode(char* lpTarget, char* lpSource, int nLen,int f)//服務端加密
{
BYTE l_BYTE_Xor1 = (WORD)nLen * D_WORD_XOR1MUL, l_BYTE_Xor3;
WORD l_WORD_Xor3 = D_WORD_XOR3BASE, nCir;
for (nCir=0; nCir<(WORD)nLen; nCir++)
{
l_BYTE_Xor3 = HIBYTE(l_WORD_Xor3);
lpTarget[nCir] = lpSource[nCir] ^ l_BYTE_Xor1 ^ key[nCir % D_XORTABLE_LENGTH] ^ l_BYTE_Xor3;
l_WORD_Xor3 *= D_WORD_XOR3MUL;
}
}
//////////登入解密
void Encode_Decode(LPBYTE lpTarget, LPBYTE lpSource, WORD nLen)
{
// 8 * 0x009d
BYTE l_BYTE_Xor1 = nLen * D_WORD_XOR1MUL, l_BYTE_Xor3;
// 0x086d
WORD l_WORD_Xor3 = D_WORD_XOR3BASE, nCir;
for (nCir=0; nCir<nLen; nCir++)
{
l_BYTE_Xor3 = HIBYTE(l_WORD_Xor3);
lpTarget[nCir] = lpSource[nCir] ^ l_BYTE_Xor1 ^ G_BYTE_XorTable[nCir % D_XORTABLE_LENGTH] ^ l_BYTE_Xor3;
l_WORD_Xor3 *= D_WORD_XOR3MUL;
}
}
解密添加了
if (bSend)
{
l_BYTE_Xor1*=0x00AA;
l_WORD_Xor3*=0x00BB;
}
服務端加密我該怎么寫這個呢?
uj5u.com熱心網友回復:
直接在服務端呼叫一次,登陸不了啊。。。
uj5u.com熱心網友回復:
求大神幫偶看看呀轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/132577.html
標籤:網絡通信
