def breakRepeatingKeyXor(x, k): blocks = [x[i:i + k] for i in range(0, len(x), k)] transposedBlocks = list(itertools.zip_longest(*blocks, fillvalue=0)) key = [ challenge3.breakSingleByteXOR(bytes(x))[0] for x in transposedBlocks ] return bytes(key)
def findSingleByteXOR(lines): brokenLines = [challenge3.breakSingleByteXOR(l)[1] for l in lines] def scoring(i): return challenge3.scoring(brokenLines[i]) maxI = max(range(len(brokenLines)), key=scoring) return (maxI + 1, brokenLines[maxI])
def breakSameKey(strings): transposedStrings = list(zip(*strings)) key = [ challenge3.breakSingleByteXOR(bytes(x))[0] for x in transposedStrings ] return bytes(key)
def breakRepeatingKeyXor(x, k): blocks = [x[i:i+k] for i in range(0, len(x), k)] transposedBlocks = list(itertools.zip_longest(*blocks, fillvalue=0)) key = [challenge3.breakSingleByteXOR(bytes(x))[0] for x in transposedBlocks] return bytes(key)
def findSingleByteXOR(lines): brokenLines = [challenge3.breakSingleByteXOR(l)[1] for l in lines] def score(i): return challenge3.score(brokenLines[i]) maxI = max(range(len(brokenLines)), key=score) return (maxI+1, brokenLines[maxI])
def breakSameKey(strings): transposedStrings = list(zip(*strings)) key = [challenge3.breakSingleByteXOR(bytes(x))[0] for x in transposedStrings] return bytes(key)