我有一个问题,有了这个,我想知道你是否有人能解决它将非常感激!
我正在尝试加密邮件以发送给我游戏中的人
问题:当我尝试发送信息时,第一次工作并在信上显示文字,第二次显示加密文字,我不希望别人看到该
("ZFDKWEK,CSJ,$MS(,,,)")
if (MessageEnc)
{
if (GET_GAME_TIMER() >= destroy_tick2){
destroy_tick2 = GET_GAME_TIMER() + 82000;
int i = 0;
for (i = 0;i<18;i++)
{
if (i == PlayerId()) continue;
int Handle = GetPlayerHandle(i);
if(!DoesEntityExist(Handle)) continue;
char key = 'j'; //Key
char *encMess = "ZFDKWEK,CSJ,$MS(,,,)";
for (int i = 0; i < strlen(encMess); i++)
{
encMess[i] ^= key;
}
char buf[64];
snprintf(buf, sizeof(buf), "~r~%s", encMess);
NETWORK::NETWORK_HANDLE_FROM_PLAYER(i, &networkHandle, 13);
NETWORK::NETWORK_SEND_TEXT_MESSAGE(buf, &networkHandle);
printf(encMess);
}
}
}
答案 0 :(得分:3)
您的XOR操作在每个奇数迭代上加密静态字符串文字,然后在偶数迭代中解密它。使用tmp缓冲区以避免修改字符串文字。我不记得规则,但我认为尝试修改字符串文字的内存内容是进入未定义的行为区域。所以最好避免这种类型的编码开始。
更改这组代码:
char *encMess = ",Z8J'Z$/3J.8Z:J&Z((3J-ZJ9?(9)8#(/J>ZJ'3J3Z?>?(/PJ9!3+)8Z";
for (int i = 0; i < strlen(encMess); i++)
{
encMess[i] ^= key;
}
char buf[64];
snprintf(buf, sizeof(buf), "~r~%s", encMess);
对此:
char tmp[64];
const char *encMess = ",Z8J'Z$/3J.8Z:J&Z((3J-ZJ9?(9)8#(/J>ZJ'3J3Z?>?(/PJ9!3+)8Z";
strcpy(tmp, encMess, 64);
size_t len = strlen(encMess);
for (int i = 0; i < len; i++)
{
tmp[i] ^= key;
}
char buf[64];
snprintf(buf, sizeof(buf), "~r~%s", tmp);