the ^ and % operators in context

The % is modulus (remainder) operator and ^ is bitwise. In this
context, we take a file, and go through each character and encrypt it.
But why are the ^ and % operators used here:

def encrypt(reader, writer)
    key_index = 0
    while not reader.eof?
      clear_char = reader.getc
      encrypted_char = clear_char ^ @key[key_index]
      writer.putc(encrypted_char)
      key_index = (key_index + 1) % @key.size
    end
  end

thanks for response

John Merlino wrote in post #1044105:

The % is modulus (remainder) operator and ^ is bitwise. In this
context, we take a file, and go through each character and encrypt it.
But why are the ^ and % operators used here:

def encrypt(reader, writer)
    key_index = 0
    while not reader.eof?
      clear_char = reader.getc
      encrypted_char = clear_char ^ @key[key_index]
      writer.putc(encrypted_char)
      key_index = (key_index + 1) % @key.size
    end
  end

thanks for response

The use of XOR is a common operation in cryptography. I'm not sure how
it all exactly works, but I have serious doubts about the security of
this particular encrypt method. I would highly recommend using an actual
encryption library, and never try to do it yourself. That is if you want
any sense of real security at all.

This is not actually a piece of code I would use, but rather something
from a book thats a mental exercise.

The % is modulus (remainder) operator and ^ is bitwise.

Specifically, bitwise XOR. Very important to know what operation is
being done.... :slight_smile:

But why are the ^ and % operators used here:

def encrypt(reader, writer)
key_index = 0
while not reader.eof?
clear_char = reader.getc
encrypted_char = clear_char ^ @key[key_index]
writer.putc(encrypted_char)
key_index = (key_index + 1) % @key.size
end
end

You're using ^ because you are encrypting each char by doing a bitwise
XOR with the corresponding byte of the key.

You're using % because the the key, in this case, is of finite length.
If your plaintext is longer, then you have to repeat the key, i.e.,
start over at the beginning of the key but keep going within the
plaintext. (Or of course come up with a new key, and find some way to
tell the correspondent what the new key is, but that's a whole 'nother
problem.)

Google things like basic cryptography, introduction to cryptography,
cryptography tutorial, etc. for more info.

-Dave