Each line of the ascii plaintext has been encrypted by xoring with the same randomly generated key pad, then encoded in hex. Your task is to decrypt as much of it as possible. You should at least be able to get the entire last line.
Please submit your code and writeup to Gradescope before class on October 4th. Your code should be named hw1-sol.py, and your writeup should be named hw1-solutions.pdf. You may discuss this assignment in small groups with classmates, but please code and write up your solutions yourself. Please credit any collaborators you discussed with and any references you used.
Start early! This assignment will take longer than you think.
e1a52c0efbfcb6e639e18c2cf9a09b21cdd777ba1213f66089ed1833d410e729609f6e0dcdeacb0ec6e16617b0c13e08a114cebf590c4bec73a9941d24cf2ecc3bc6b4a52827cfcd3fa760bfee96ff2fc3aaf4ed44807115b61d70c7e9eb4d4904ec5a7afc0d4d2b5dc2a551b7812281f9199f4a88ca18d1c2936ba44d684cce89 e9a17c07e8fdf8f030fdce2cf0ae9b69c7cb72ad5557f868c6fb113ad43bd80d238e640bd0f7840ecdfa6652b5d97718a5098db9160659f176ec871624cf31d03192bea07c3ac9cf3f9f219fb496f52dc4b5f2e14c9d7d10fa5479cef0fc52461de05b60fc04503e1cc3ba4ea4d5238ffb0c9f42c68909d7d3c66eb2110e efbb3016a9aaf8e230eac369f9bbcf6ec4995aae5705f667c8f70376833bc60d609f6001d0be8659c5e67717b0c13e1ab80e9da85306168f 829b0f2ea5bbf8fa3ceb806ee2ab8b7882d374a85713b3248bea04379a3ac7482695644499d0880ef7e1715ff9f4791aae0497f211421a8f f7bc2807a9f8f8ff3ce0d479e5aacf6ec4997ab34205fa6cccf7033f9b3094092e9e3607cbec8e41d7fd664ef5955c1aa30c8bae16035be672bc921d24cf35ca3bc6b6ba7b27c2da76a57abfbad7f124cba5f8af59d47712bc58658695 e8b07c0bfbf6aef775ecc869b7bb8768d0cd62ee4112e961c7b91d3f983bc74834953610d6fb8e5c84f17b50b1c16752b30e96f157014ae037a48319249e34c32c92beb17b73cfc17bae6aa2bad2ff32c6b4e4ed5e986154b35337dcf7eb1f5006e6506bb842572550c0bf0bb9936ba8f818cb03ab8f0dddc29f3c865e76518ce2bb382cde e1b3280afbb9a8f326ebc962f0ef9b69d0d66ea45a57fa6acdf51525877ec70d238f640dcae7c74dccf1715caa957f11a4478cb95f0c5fa57ebf950d258b61c37e95b2bb253bc8dd6de62fa4f5daf926d7a7f1e043973813af5864dcbffe5e541aa53e c8b07c18e8eaf8f726fbcf7ee3aa8b21d6d63ba21207f371daf15024912dd10932997e44d8ff8447c8fd664ef9c2761ab202ceb453424fe464ec92172c8b61ca3bc6acac7d3fc3886cba6aa2fe96e229c0e6e0ee5e916a1ab5527988effc505100ed5d60bb421d2e50c5a24ff6863e9ee705cd57c4ca18d687c774ae1f475a99f3a13365a62c540447ae19cffd9bef78f7f99946 c1bb7c0ae5f0acf775ffd263e2bfcf6ec49976a2461ffa69c8ed19359532940a329b7f0ad7ff845d84ff7c58aedb3e1eb3479ab453425bea73a9cb1a328a20c93b94a8ed02 e6ba2e4ffdf1bdb233f1d27fe3ef876ed7cb37e3461ffa24caeb09268031d31a218a7e01ccedc75dc1f17f52bd956b11a1108fae53427ae074a7830a609820d17e83ada66673d3c07ab86ae290 f4bd3916a9f1b7e430eac568b7ae9d6ed7d77fe35319bf61c7f6023b9b2bc748349b7408dbbe8640c0b46147b6de7b5fa14782bd58054de470a9c63a258c2ac72cc6b3a26c73c9cd69af7decf2d3f733c1e88b f4bd3916a9eaa8fd3efd8063f1ef9c75d0dc7aae1214f674c1fc0225d87ec70d2c9c3b00dbfd8e43c5e07753f9d27b11a5158fa859104ba937a78819309c20c135c6ada27a3ac6c66bb923ece0d3e42e85adefe75d987d10bd5837d8ede14b480ae6587df0424a2255cfa55fafd53b81fe04cb50c8e0 e2b03f04ecebf8fd37ebc57ee1aa8b2d82d574b0465995 f4bd3916a9eabbe034efcc69f3ef9c78cfdb74af4157f06a89fe023784369418218a731692be9741d6f17617b6c37b0de00481b146174ce065ec960a298135cd2b92a8ef2832c9cc3fa960a2eedff834cab3f2e453d46a11bc5865dafaea1f5306a94066b942553951cea04ef69a2dcee30fc757c6850299d3db79eb50724d92ebb03d66f43d560354eb3ed2e480b21b aa 80f57c2ce6f7bfe034ecd560f6bb866eccca37e34b18ea24c1f80633d439db1c349f7844caf68e5d84f27345f7953e3db513cea559171ff772ec881734cf25cd3083fbba6d2786a2 80f57c36e6ecf8f134f6806afea18b21d6d17ee34012ec7089f616768036d14828957b01c9f1954584e46058bbd97b12b34786b94407028f 80f57c07fdeda8e16fb78f6fe4aa9864c0976ea04113b161cdec5f35983fc71b25893902dfacd501c7e77705e9825c52a14886ab074d50f226e2961c26e5For reference, the ciphertext was generated using the following Python 3 program, adapted from Dan Boneh.
import os
MSGS = open("hw1-message.txt").readlines()
def bytexor(a, b): # xor two byte arrays (trims the longer input)
return bytes([x ^ y for (x,y) in zip (a,b)])
def random(size=16):
return os.urandom(size)
def encrypt(key, msg):
c = bytexor(key, msg)
print(c.hex())
return c
def main():
key = random(1024)
ciphertexts = [encrypt(key, msg.encode('utf-8')) for msg in MSGS]
return ciphertexts
if __name__=='__main__':
main()