Week 4 Exercise: Bits And XOR Encryption
Chris Tralie
You can obtain the code for today's exercise here:
git clone https://github.com/ursinus-cs174-s2022/Week4_Bits.git
Exercise 1: Printing numbers in binary
I've provided a file num2binary.cpp
which takes in an int
as a command line argument and prints out a corresponding 32-bit unsigned binary string using the "textbook algorithm" for doing this. For example,
1 2 | ./num2binary 2000000000 |
will print out 01110111001101011001010000000000
Your job will be to fill out a file mynum2binary.cpp
that accomplishes the same thing, but only using bitwise operators:
- Allowed: Binary AND (&), Binary OR (|), Binary XOR (^), Left Binary Shift (< <), and Unsigned Right Binary Shift (> > >)
- NOT Allowed: +, -, /, *, %
Exercise 2: Converting a binary string to a number
I've provided a file binary2num.cpp
which takes a binary string as a command line argument and which prints out the number corresponding to it. For example
1 2 | ./binary2num 11011 |
will print out 27
Your job will be to fill out a file mybinary2num.cpp
that accomplishes the same thing, but only using bitwise operators
Exercise 3: XOR Encryption
Fill in the file encrypt.cpp
to implement XOR encryption/decryption. The command line arguments refer to three files:
- The first file is thought of either as the "plain text" (original message) or the "cipher text" (encrypted message)
- The second file is the "cipher," or what we use to encrypt information
- The third file is the output file which stores the cipher text or the decrypted text
For example, if you run
1 2 | ./encrypt hidden password.txt decrypted.txt |
It will decrypt the bytes in hidden
by XORing with the bytes in password.txt
and save the result to decrypted.txt
. If this works, you should be able to read the text in decrypted.txt
The steps to accomplish this are as follows:
- Load in file1
- Load file2
- Loop through and replace each byte in file1 with the XOR of the corresponding byte in file2. If file2 reaches the end, loop back to the beginning
- Write out the resulting XORED file