def md5(fname): """ https://stackoverflow.com/a/3431838/4739690 md5 is percise enough for this use-case, this isn't crypto after all ;) """ hash_md5 = md5_() with open(fname, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) return hash_md5.hexdigest()
#!/usr/bin/env python3 from re import match from hashlib import md5 as md5_ from itertools import product md5 = lambda x: md5_(x.encode()).hexdigest() TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ{}" ENCRYPT, DECRYPT = 1, -1 def vigenere(string, key, mode=ENCRYPT, table=TABLE): L = len(key) key = [ table.index(i) for i in key ] string = [ table.index(i) for i in string ] cipher = [ (v + mode * key[i % L]) % len(table) for i, v in enumerate(string) ] return ''.join(table[i] for i in cipher) key = ".......?????" plaintext = "SECCON{...................................}" ciphertext = "LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ" md5_hash = "f528a6ab914c1ecf856a1d93103948fe" known_key = '' for idx, char in enumerate('SECCON{'): for k in TABLE: if vigenere(char, k) == ciphertext[idx]: known_key += k break print('known_key = %s' % known_key)
def md5(byte): return md5_(byte).hexdigest().upper()
def md5(text: str) -> str: m = md5_() m.update(text.encode()) return m.hexdigest()