def test_keysize_striping(self): square_text = '12345678901234567890123456789012345678901234567890' + \ '12345678901234567890123456789012345678901234567890' square_trans = ['1111111111', '2222222222', '3333333333', '4444444444', '5555555555', '6666666666', '7777777777', '8888888888', '9999999999', '0000000000'] assert vigenere.keysize_striping(square_text, 10) == square_trans, \ "Keysize transpose doesn't behave as expected."
from tools import vigenere cipherAddr = sys.argv[1] #get the cipher cipherFile = open(os.getcwd() + "/" + cipherAddr, "r") b64_cipher = cipherFile.read() cipherFile.close() #clean whitespace cipher = ''.join(b64_cipher.split()) #pitch b64 encoding cipher = vigenere.to_text(cipher) #find keysize - probablistic, can misfire keysize = vigenere.find_keysize(cipher) #divide cipher into blocks that were xored with the same character cipher_blocks = vigenere.keysize_striping(cipher, keysize) #brute force each block key = '' text_transpose = [] largest_block = max(len(blocks) for blocks in cipher_blocks) for block_cipher in cipher_blocks: block_key, block_text = vigenere.brute_xor(block_cipher) #square each block if len(block_text) < largest_block: block_text += 'X' key += block_key text_transpose.append(block_text) #transpose and reassemble the plaintext plaintext = ''.join([''.join(block_rows) for block_rows in zip(*text_transpose)])