2. Conversion hexadécimal vers base64

2. Opération XOR fixe

Fixed XOR

Write a function that takes two equal-length buffers and produces their XOR combination.
If your function works properly, then when you feed it the string:
1c0111001f010100061a024b53535009181c
... after hex decoding, and when XOR'd against:
686974207468652062756c6c277320657965
... should produce:
746865206b696420646f6e277420706c6179

Pour pouvoir résoudre cet exercice il faut avoir à minima une compréhension de ce qu'est une opération XOR. Pour résumer le concept de manière simple, une opération XOR (notée ⊕) est le résultat d'une addition d'au moins deux bit (0 ou 1). Le résultat de cette opération prendra le même nombre de bit et sera calculé de la manière suivante:

Pour résoudre cet exercice il faudra donc être en mesure de transformer les deux chaines hexadécimales fournies de manière à pouvoir appliquer une opération XOR dessus.
En Python il n'est pas possible d'effectuer nativement un XOR de chaines hexadécimale ; la solution la plus simple est de convertir au préalable les chaines hexadécimale en entier base 10 (composée de chiffres allant de 0 à 9), d'appliquer une opération XOR entre les deux entiers puis de convertir le résultat en hexadécimal.

Une solution peut être codée comme suit:

def xor_hex(string_one, string_two):
    return format(int(string_one, 16) ^ int(string_two, 16), "x")

string_1 = "1c0111001f010100061a024b53535009181c"
string_2 = "686974207468652062756c6c277320657965"
expected_result = "746865206b696420646f6e277420706c6179"

print(xor_hex(string_1, string_2) == expected_result)

Remarque: la fonction format avec x en second paramètre est une fonction native qui permet de transformer le nombre entier résultant de l'opération en chaine hexadécimale

En exécutant notre code on obtient la confirmation que l'addition XOR des deux chaines de caractères hexadécimale donne bien le résultat attendu.