2016-12-21 247 views
-4

我有一個問題,有了這個,我想知道如果你們中的任何人都可以解決它將非常感激!需要strlen幫助

我試圖加密郵件發送給的人在我的遊戲

問題:當我試圖把我的消息的第一時間要去工作,並顯示在字母文字和第二次是要去顯示加密後的文本,我不希望人們看到

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

歡迎堆棧溢出。請[參觀],閱讀[問]以及如何創建[mcve]。當您發佈文字時請勿張貼圖片,請避免「需要幫助」,「我有一個小問題,有了這個,我想知道是否有人能解決這個問題將非常感謝!」,「大家今天「永遠不要這樣做」如果你能幫助我解決問題,我會通過PayPal捐贈:)「。謝謝。 – Stargateur

+0

因此,跳過每隔一個打印一次。 –

+1

不要在有答案後摧毀你的問題。這絕對不是猶太教。 –

回答

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