Hoihoi
Ik ben met cryptopals bezig; dat is een challenge waarbij je diverse crypto-dingen gaat coden.
Een van de dingen waar ik momenteel op crash is het programmeren van een repeating XOR.
Op zich is de code prima, maar ik merk dat ik niet handig om ga met een newline in de input...
Het betreft:
http://cryptopals.com/sets/1/challenges/5/
Wat ik doe is dit:
Die desired_output is puur om makkelijk te checken of de boel klopt.
Mijn functies (uit de eigen cryptopals package):
Op zich zijn deze volgens mij prima, ik krijg namelijk de volgende output:
Kan iemand me een hint de goede richting op geven?
Ik weet overigens dat ik mijn plaintext 2x definieer, wil daarmee aangeven dat ik ook op die manier heb zitten pielen, maar dat lijkt me niet de way to go. Of wel?
Ik ben met cryptopals bezig; dat is een challenge waarbij je diverse crypto-dingen gaat coden.
Een van de dingen waar ik momenteel op crash is het programmeren van een repeating XOR.
Op zich is de code prima, maar ik merk dat ik niet handig om ga met een newline in de input...
Het betreft:
http://cryptopals.com/sets/1/challenges/5/
Wat ik doe is dit:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| import cryptopals import functools plaintext=['Burning \'em, if you ain\'t quick and nimble','go crazy when I hear a cymbal'] plaintext=['Burning \'em, if you ain\'t quick and nimble\ngo crazy when I hear a cymbal'] key="ICE" desired_output='0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f' for p in plaintext: plainbytes=cryptopals.str_to_bytes(p) keybytes=cryptopals.str_to_bytes(key) output=cryptopals.xor(plainbytes,keybytes) result = functools.reduce(lambda x,y: str(x)+str(y), list(map(lambda x: format(x,'x').zfill(2),output))) print (result) print (desired_output) |
Die desired_output is puur om makkelijk te checken of de boel klopt.
Mijn functies (uit de eigen cryptopals package):
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| def xor(input,key): """ xor the input against key. Parameters: input: bytearray of input data key: bytearray of key Return value: 'input' xor'ed against repeating-key 'key' """ key_index=0 result=[] for i in input: result.append(i^key[key_index%len(key)]) key_index+=1 return result def str_to_bytes(s): return (bytearray(bytes(s, "utf-8"))) |
Op zich zijn deze volgens mij prima, ik krijg namelijk de volgende output:
Ik heb hem even in een quote gezet zodat ik bold kan gebruiken... wat je ziet is dat de expected result net iets langer is en anders. Dit komt omdat de \n niet wordt meegenomen; ik vermoed dat dat aan mijn encore-aanroep ligt, maar zeker weten doe ik het niet.0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f2043242a69203728393c69342d2c2d6500632d2c22376922652a3a282b2229
0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f
Kan iemand me een hint de goede richting op geven?
Ik weet overigens dat ik mijn plaintext 2x definieer, wil daarmee aangeven dat ik ook op die manier heb zitten pielen, maar dat lijkt me niet de way to go. Of wel?