【问题标题】:Need help for strlen [closed]需要strlen的帮助[关闭]
【发布时间】:2016-12-21 04:35:57
【问题描述】:

我有一个问题,我想知道是否有人能解决它,将不胜感激!

我正在尝试加密消息以发送给我游戏中的人

问题:当我尝试发送我的信息时,第一次可以正常工作并在 Letter 上显示文本,第二次会显示加密文本,我不希望人们看到它

("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);                        
                    }
                    }
                    }

【问题讨论】:

  • 欢迎堆栈溢出。请获取tour,阅读How to Ask 以及如何创建minimal reproducible example。当您可以发布文字时不要发布图片,请避免“需要帮助”,“我有一个小问题,我想知道是否有人可以解决它,将不胜感激!”,“今天大家好”并且永远不要这样做“如果你能帮我解决问题,我会通过贝宝捐款:)”。谢谢。
  • 所以,跳过打印每隔一个。
  • 得到答案后不要破坏你的问题。这绝对不是犹太教的。
  • 您不能寻求帮助并在之后尝试隐藏您的问题。您的新编辑不会改变您问题的含义。但这真的很可疑。如果您输入一些私人信息,您可以阅读此stackexchange.com/legal/terms-of-service#15CopyrightPolicy。

标签: c strlen


【解决方案1】:

您的 XOR 操作是在每次奇数迭代时加密静态字符串文字,然后在偶数迭代时对其进行解密。使用 tmp 缓冲区来避免修改字符串文字。我不记得规则,但我认为尝试修改字符串文字的内存内容正在进入 undefined behavior 领域。所以最好一开始就避免这种类型的编码。

更改这组代码:

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);

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2021-11-12
    • 2014-09-22
    • 2014-08-31
    • 2018-02-15
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多