It works because the xor of two bits is zero if and only if the two bits are the same:
0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
So the xor of two characters (which are a string of 8 bits) will be 0 (8 0bits) if and only if the two characters are the same.
Using xor on strings xors the characters from the first string with the characters in the second string, so in the places where the characters are identical the resulting character will be zero, and in all places where they differ it will be nonzero.
