finalizing

This commit is contained in:
Christoph J. Scherr 2023-04-22 10:42:29 +02:00
parent a1a5fc10b3
commit 613605c341
Signed by: PlexSheep
GPG Key ID: 25B4ACF7D88186CC
1 changed files with 8 additions and 3 deletions

View File

@ -1,6 +1,10 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
Dirty hash we were covered in an excercise for Week 16 of 2023 in cryptography Dirty hash we were covered in an excercise for Week 16 of 2023 in cryptography
author: Christoph J. Scherr <software@cscherr.de>
version control at: https://git.cscherr.de/PlexSheep/python-dhbw/src/branch/master/src/trash-hash.py
License: MIT
""" """
import math import math
import random import random
@ -65,11 +69,12 @@ def test_against_hash(input: bytearray, target_hash: bytearray) -> bool:
# the hash we want to find in the preimage attacks # the hash we want to find in the preimage attacks
# comes from 'AAAA' # comes from 'AAAA'
#THE_HASH_ORIGIN = bytearray(b'AAAA')
#THE_HASH = bytearray(b'\xe4\xe4\xe4\xe4\xa5\xa5\xa5\xa5\xaa\xaa\xaa\xaa\x55\x55\x55\x55') #THE_HASH = bytearray(b'\xe4\xe4\xe4\xe4\xa5\xa5\xa5\xa5\xaa\xaa\xaa\xaa\x55\x55\x55\x55')
# any custom hash you want to find a collision for: # any custom hash you want to find a collision for:
# needs to be 16 bytes long # needs to be 16 bytes long
# TODO fill with padding if not long enough # TODO fill with padding if not long enough
THE_HASH_ORIGIN = bytearray(b'amogus sus sus mogus more than 16 lol') THE_HASH_ORIGIN = bytearray(b'1249239473289754927513214 21421 4124 214 21')
THE_HASH = trash_hash(THE_HASH_ORIGIN) THE_HASH = trash_hash(THE_HASH_ORIGIN)
def first_preimage(): def first_preimage():
@ -84,9 +89,9 @@ def first_preimage():
for i in range(0, 16): for i in range(0, 16):
between[i] = THE_HASH[i] ^ DEFINED_INITIAL[i] between[i] = THE_HASH[i] ^ DEFINED_INITIAL[i]
print("%d:\tbtw %s\ttar %s\thash %s\n\tini %s\tinp %s" % (i, between.hex(), target.hex(), THE_HASH.hex(), DEFINED_INITIAL.hex(), input.hex())) #print("%d:\tbtw %s\ttar %s\thash %s\n\tini %s\tinp %s" % (i, between.hex(), target.hex(), THE_HASH.hex(), DEFINED_INITIAL.hex(), input.hex()))
input[i] = target[i] ^ between[i] input[i] = target[i] ^ between[i]
print("%d:\tbtw %s\ttar %s\thash %s\n\tini %s\tinp %s" % (i, between.hex(), target.hex(), THE_HASH.hex(), DEFINED_INITIAL.hex(), input.hex())) #print("%d:\tbtw %s\ttar %s\thash %s\n\tini %s\tinp %s" % (i, between.hex(), target.hex(), THE_HASH.hex(), DEFINED_INITIAL.hex(), input.hex()))
assert THE_HASH[i] == DEFINED_INITIAL[i] ^ between[i], "xor circle is broken: %s vs %s" % (hex(THE_HASH[i]), hex(input[i] ^ between[i])) assert THE_HASH[i] == DEFINED_INITIAL[i] ^ between[i], "xor circle is broken: %s vs %s" % (hex(THE_HASH[i]), hex(input[i] ^ between[i]))
input: bytearray = bytearray(bytes(a ^ b for a, b in zip(input, target))) input: bytearray = bytearray(bytes(a ^ b for a, b in zip(input, target)))