As nice as XOR is in its behavior, it is not quite as nice
as some folks naively (or maliciously) claim. A surprising
number of real-world applications use an encryption that
consists of nothing more than XOR. Mind you, there is one
perfectly good case where this works -- a one-time pad (OTP).
If you happen to have as much key material available as
plain text to encrypt, XOR is provably perfect encryption
(assuming key material is truly stochastic, that is, it has an
entropy equal to its length, and therefore a rate-of-language
of 1).
Many flawed algorithms take a fairly small
amount of key material, XOR each plain text block with a
block of key, and call that result the cipher text. This
works fine for a single block. But
as soon as you start reusing this same key block to encrypt
multiple cipher text, things fall apart.