Advanced Python (Fall 2017)/lecture10

From ICO wiki
Revision as of 10:26, 14 November 2017 by Eroman (talk | contribs) (Created page with "= Lecture 10 = Cryptopals Many solution here:")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Lecture 10


Many solution here:

Very good solutions here (better than mine):

Binary, Hex, Base64

Look them up if you don't know what they are. Unfortanetly, I cannot find a very good introduction to the topics in python.

In python you have integer literals in base 10, like 10 or in base 16, like 0xf or in base 2, like 0b1

Binary numbers can easily be representing in base 16 (called "Hex"). 8 bits (binary digits) is 2 digits in hex. Base64 is a way of storing binary data so it uses only ascii characters. A string of Base64 is shorter than a string of equivalent Hex, so Base64 is popular way to put binary data embeded in a text document.


The problems are good because they require us to understand encoding in python. My solutions are poorer quality in comparison to the solutions here:

Problem 1-1

import base64

message_hex = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"
message_bytes = bytearray.fromhex(message_hex)
message_base64 = base64.encodebytes(message_bytes)

Problem 1-2

one way

# Convert both hex string to bytes
hex_string_1 = '1c0111001f010100061a024b53535009181c'
hex_string_2 = '686974207468652062756c6c277320657965'

bytes_1 = bytearray.fromhex(hex_string_1)
bytes_2 = bytearray.fromhex(hex_string_2)

# Pair each byte with other byte in same position
byte_pair_list = list(zip(bytes_1, bytes_2))

# go through each bit in hex string bytes, and xor, and store result
# XOR opertator is ^
result_list = []
for b1, b2 in byte_pair_list:
    xor_result = b1 ^ b2

# convert list of integers to hex
result_bytes = bytearray(result_list)