howmuch515 icon

caesar.py

howmuch515 | PRO | 10/02/19 03:49:59 PM UTC | 0 ⭐ | 318 👁️ | Never ⏰ | []
Python |

2.05 KB

|

None

|

0 👍

/

0 👎

#!/usr/bin/python3
from HMlib.colorLog import *
import sys
import argparse
 
# converting function
def shiftASCII(x, n, cap):
 
    # if char is capital, cap flag is True.
    if cap: minChr, maxChr = "A", "Z"
    else: minChr, maxChr = "a", "z"
 
    # char shift
    result = ord(x) + n 
 
    # case that result char is over "Z" or "z".
    if result > ord(maxChr):
        result = (ord(minChr) - 1) + result % (ord(maxChr))
 
    return chr(result)
 
def rotN(text, N):
    result = []
 
    for i in text:
        intOfI = ord(i)
    
        # case that char is capital.
        if 65 <= intOfI <= 90:
            result.append(shiftASCII(i, N, True))
 
        # case that char is not capital.
        elif 97 <= intOfI <= 122:
            result.append(shiftASCII(i, N, False))
 
        else: result.append(i)
 
    return "".join(result)
 
if __name__=='__main__':
    # parse args
    parser = argparse.ArgumentParser(description="IT IS CAESAR CHIPHER TOOL")
    parser.add_argument('-d', '--data', type=str, default=None, help='string of caesar crypto')
    parser.add_argument('-i', '--input_file_name', type=str, default=None, help='input file')
    parser.add_argument('-o', '--output_file_name', type=str, default=None, help='output file')
 
    args = parser.parse_args()
    data = args.data
    input_file_name = args.input_file_name
    output_file_name = args.output_file_name
 
    cipherText = ''
 
    # read from input_file or data
    if input_file_name is not None:
        with open(input_file_name, 'r') as f:
            cipherText = f.read()
    else:
        cipherText = data
 
    # display result
    for i in range(26):
        # ROT13
        if i == 13: result("rot{0:>2} ==> {1}".format(i, rotN(cipherText, i)))
        else: info("rot{0:>2} ==> {1}".format(i, rotN(cipherText, i)))
 
    # write to output_file
    if output_file_name is not None:
        with open(output_file_name, 'w') as f:
            for i in range(26):
                f.write("rot{0:>2} ==> {1}\n".format(i, rotN(cipherText, i)))

Comments