Example #1
0
 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."
Example #2
0
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)])