How can I bitwise XOR two C char arrays?

后端 未结 2 1812
-上瘾入骨i
-上瘾入骨i 2021-01-04 11:36

I feel silly for not being able to figure this out, but I am lost. I am trying to XOR two C strings.

#include 
#include 
#incl         


        
相关标签:
2条回答
  • 2021-01-04 12:13

    Once you are dealing with XOR, you are dealing with binary bytes that might not be printable ASCII characters.

    And when you XOR the same characters with each other, you get a 0. So 'P' ^ 'P' will be 0. That's a NUL byte and it terminates the string. If you try to print with printf() you get nothing; printf() considers the string to be a terminated length-0 string.

    Also, you should simply assign the XOR result into your target buffer with = rather than using ^= as your program did.

    Here's my version of your program, and my output:

    #include <stdio.h>
    #include <memory.h>
    #include <stdlib.h>
    
    #define LENGTH 16
    int main()
    {
        char const plainone[LENGTH] = "PlainOne";
        char const plaintwo[LENGTH] = "PlainTwo";
        char xor[LENGTH];
        int i;
    
        for(i=0; i<LENGTH; ++i)
            xor[i] = (char)(plainone[i] ^ plaintwo[i]);
        printf("PlainText One: %s\nPlainText Two: %s\n\none^two: ", plainone, plaintwo);
        for(i=0; i<LENGTH; ++i)
            printf("%02X ", xor[i]);
        printf("\n");
        return 0;
    }
    

    Output:

    PlainText One: PlainOne
    PlainText Two: PlainTwo
    
    one^two: 00 00 00 00 00 1B 19 0A 00 00 00 00 00 00 00 00
    

    Notice how the first five bytes are all 00 because Plain is XORed with Plain.

    0 讨论(0)
  • 2021-01-04 12:23

    Well "Plain" xor "Plain" == 00000, were 0 is the terminator char. C strings print up to the terminator, which means it prints nothing.

    0 讨论(0)
提交回复
热议问题