def main():
    random.seed(42)

    for i in range(15):  #run 15 tests
        message = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" * random.randint(4, 40)

        message = list(message)
        random.shuffle(message)
        message = ''.join(message)

        print("Test #%s: %s..." % (i + 1, message[:20]))

        for key in range(1,
                         math.ceil(len(message) / 2)):  #test all possible keys
            ciphertext = TranspositionCipher.encryptMessage(key, message)
            plaintext = TranspositionCipherDecrypt.decryptMessage(
                key, ciphertext)

            if plaintext != message:
                print("ERROR // Test #%s using key #%s failed!" % (i + 1, key))
                print("Message reads: %s" % (message))
                print("Decryption reads: %s" % (plaintext))
                sys.exit(0)

    print("Test passed.")
Exemplo n.º 2
0
def main():
    #inputFilename = 'frankenstein.txt'
    # to decrypt, next line must run
    inputFilename = 'frankenstein.encrypted.txt'
    outputFilename = 'frankenstein.decrypted.txt'
    
    myKey = 10
    myMode = 'decrypt'
    
    # if input file does not exist program leaves early.
    if not os.path.exists(inputFilename):
        print "the file %s does not exist. Qutting..." % (inputFilename)
        sys.exit()
    
    # if output file exists, give user a chance to continue
    
    if os.path.exists(outputFilename):
        print "this will overwrite the file %s. (C)ontinue or (Q)uit?" % (outputFilename)
        response = raw_input('> ')
        if not response.lower().startswith('c'):
            sys.exit()
    
    # read in message from input file
    
    fileObj = open(inputFilename)
    content = fileObj.read()
    fileObj.close()
    
    print '%sing...' % (myMode.title()) # converts lowercase to first letter capitalized 
    
    startTime = time.time()
    
    if myMode == 'encrypt':
        translated = TranspositionCipher.encryptMessage(myKey, content)
    elif myMode == 'decrypt':
        translated = decryptTransposition.decryptMessage(myKey, content)
    
    totalTime = round(time.time() - startTime, 2)
    print '%sion time: %s seconds' % (myMode.title(), totalTime)
    
    # write out translated message to a file
    
    outputFileObj = open(outputFilename, 'w')
    outputFileObj.write(translated)
    outputFileObj.close()
    
    
    print 'Done %sing %s (%s characters).' % (myMode, inputFilename, len(content))
    print '%sed file is %s.' % (myMode.title(), outputFilename)
Exemplo n.º 3
0
def encryptMessage(message, key, alphabet):
    key1 = len(message)
    new_alphabet = AffineCipher.encryptMessage(alphabet, key1, alphabet)
    out1 = TranspositionCipher.encryptMessage(message, key)
    num = len(new_alphabet)
    count = 0
    out2 = ''
    first_symbol = True
    for symbol in out1:
        symbol_index = new_alphabet.find(symbol)
        if symbol_index > -1:
            symbol_index += new_alphabet.find(new_alphabet[count])
            if first_symbol is True:
                symbol_index += len(message)
                first_symbol = False
            out2 += new_alphabet[(symbol_index) % num]
        else:
            out2 += symbol
        count = (count + 1) % num
    return out2