Level 4: Detect single-character XOR
Task
One of the 60-character strings in this file has been encrypted by single-character XOR.
Find it.
(Your code from #3 should help.)
Explanation
What is a Single-Byte XOR cipher?
In this challenge, we are given a file containing multiple 60-character hexadecimal strings. One of these strings has been encrypted using a single-character XOR cipher.
Our goal is to identify which string is encrypted and then decrypt it.
To solve this, we can reuse and slightly modify the code from the previous challenge (#3), where we built a function to decrypt a single-byte XOR cipher. However, instead of applying the function to just one string, we need to loop through all the strings in the file.
Resolution
First, we are going to create a file named task4.py
Understanding the code
This script has slight modifications compared to the previous one.
with open("4.txt") as file
, this line opens the file named 4.txt in read mode. Using with ensures the file is properly closed after reading, even if an error occurs.lines
is the result offile.read().strip().split("\n")
file.read()
reads the entire content of the file into a string..strip()
removes any leading or trailing whitespace, including newline characters..split("\n")
breaks the string into a list of lines, where each line corresponds to one encrypted hexadecimal string from the file.
for line in lines
is a loop that iterates through each encrypted string in the lines variable.decoded_text
andkey
are initialized with the result ofsingle_byte_xor(line)
, which returns the best decrypted text and the key used for it.score
holds the English score of thedecoded_text
, calculated byenglish_score()
functionif score > best_overall_score
, is the conditional that updates the following variables when the current score is better than the highest found so farbest_overall_score
holds the highest score found.best_overall_text
contains the best decrypted plaintext.best_overall_key
stores the key that generated the best plaintext.best_line
keeps track of the line where the best decryption ocurred.
Result
Last updated