如何提高此XOR的输出?

时间:2015-07-02 13:01:42

标签: c encryption

我只是想做一个显然根本不安全的简单加密。一切都很好,但我得到了不可打印的字符,如新行或nul。解码时成为问题。如何在此代码中解决此问题?

#include <stdio.h>
#include <string.h>

int main()
{
    int i;
    char text[1024];

    printf("ENTER SOME TEXT \n");
    fgets(text, 1024, stdin);

    for(i=0;i<strlen(text)-1;++i)
    {
        if(text[i]!=32)
            text[i] ^= i;
    }

    printf("encoded text : %s",text);

    getch();
    return(0);
}

1 个答案:

答案 0 :(得分:1)

当然你会得到不可打印的字符,这是对值进行异或的直接后果。与您的想法相反, 在解码时会出现问题。 在解码时会出现问题,是if(text[i]!=32)检查,这是a)无用,b)破坏输出流。摆脱这个,你应该得到一个流,当然包含不可打印的字符,因为它应该,并且应该解码得很好。如果您仍然遇到问题,请务必发布尝试解码流的代码。

另外,考虑到下面的JakišaTomić的评论(虽然不完全符合措辞),你需要循环到strlen(text)而不是strlen(text)-1,这样空字符终结符也会被编码到输出流,以便您知道解码时何时停止。