|
|
|
#!/usr/bin/env python
|
|
|
|
import sys, string, types, hashlib, base64, re
|
|
|
|
|
|
|
|
LOWER_LETTERS = [chr(x) for x in range(97, 123)]
|
|
|
|
UPPER_LETTERS = [chr(x) for x in range(65, 91)]
|
|
|
|
|
|
|
|
def rot(inputString, amount):
|
|
|
|
outputString = ""
|
|
|
|
for char in inputString:
|
|
|
|
resultChar = ""
|
|
|
|
if char.isupper():
|
|
|
|
index = UPPER_LETTERS.index(char)
|
|
|
|
resultChar = UPPER_LETTERS[(index + amount)%len(UPPER_LETTERS)]
|
|
|
|
elif char.islower():
|
|
|
|
index = LOWER_LETTERS.index(char)
|
|
|
|
resultChar = LOWER_LETTERS[(index + amount) % len(LOWER_LETTERS)]
|
|
|
|
else:
|
|
|
|
resultChar = char
|
|
|
|
outputString += resultChar
|
|
|
|
return outputString
|
|
|
|
|
|
|
|
def translate(inputString, inputType, outputType):
|
|
|
|
result = ""
|
|
|
|
if(inputType == outputType):
|
|
|
|
result = inputString
|
|
|
|
return result
|
|
|
|
|
|
|
|
if (inputType == 5):
|
|
|
|
for char in inputString:
|
|
|
|
if(outputType == 1):
|
|
|
|
result += str(bin(ord(char))) + " "
|
|
|
|
elif(outputType == 2):
|
|
|
|
result += str(ord(char)) + " "
|
|
|
|
elif(outputType == 3):
|
|
|
|
result += str(oct(ord(char))) + " "
|
|
|
|
elif(outputType == 4):
|
|
|
|
result += str(hex(ord(char))) + " "
|
|
|
|
else:
|
|
|
|
result = inputString
|
|
|
|
break
|
|
|
|
return result
|
|
|
|
|
|
|
|
elif(inputType == 1):
|
|
|
|
inputString = int(inputString, 2)
|
|
|
|
elif(inputType == 2):
|
|
|
|
inputString = int(inputString)
|
|
|
|
elif(inputType == 3):
|
|
|
|
inputString = int(inputString, 8)
|
|
|
|
elif(inputType == 4):
|
|
|
|
inputString = int(inputString, 16)
|
|
|
|
|
|
|
|
if(outputType == 1):
|
|
|
|
result = bin(inputString)
|
|
|
|
elif(outputType == 2):
|
|
|
|
result = inputString
|
|
|
|
elif(outputType == 3):
|
|
|
|
result = oct(inputString)
|
|
|
|
elif(outputType == 4):
|
|
|
|
result = hex(inputString)
|
|
|
|
elif(outputType == 5):
|
|
|
|
result = chr(inputString)
|
|
|
|
return result
|
|
|
|
def base64prompt():
|
|
|
|
b64regex = '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
|
|
|
|
inputString = raw_input('Please input your string: ')
|
|
|
|
match = re.match(b64regex, inputString)
|
|
|
|
if (match):
|
|
|
|
print(base64.b64decode(inputString))
|
|
|
|
else:
|
|
|
|
print(base64.b64encode(inputString))
|
|
|
|
|
|
|
|
|
|
|
|
def rotPrompt():
|
|
|
|
choice = input("What kind of ROT do you want to perform? 1-25, or all: ")
|
|
|
|
userInput = raw_input("Please insert a string: ")
|
|
|
|
if type(choice) is types.IntType:
|
|
|
|
print(rot(userInput, choice))
|
|
|
|
else:
|
|
|
|
for i in range(0, 26):
|
|
|
|
print(rot(userInput, i))
|
|
|
|
|
|
|
|
def translatePrompt():
|
|
|
|
print("1: Binary")
|
|
|
|
print("2: Decimal")
|
|
|
|
print("3: Octal")
|
|
|
|
print("4: Hexadecimal")
|
|
|
|
print("5: ASCII")
|
|
|
|
inputType = input("Please specify input type: ")
|
|
|
|
outputType = input("Please specify output type: ")
|
|
|
|
if (inputType == 5):
|
|
|
|
inputString = raw_input("Please input your strings, seperated by semicolon: ")
|
|
|
|
else:
|
|
|
|
inputString = raw_input("Please input your values, seperated by semicolon: ")
|
|
|
|
|
|
|
|
inputList = inputString.split(";")
|
|
|
|
for entry in inputList:
|
|
|
|
print(translate(entry, inputType, outputType))
|
|
|
|
|
|
|
|
def hashPrompt():
|
|
|
|
typeChoice = raw_input('Would you like to hash a file or a String? f for file, s for string: ')
|
|
|
|
algoList = hashlib.algorithms_available
|
|
|
|
for word in algoList:
|
|
|
|
print(word)
|
|
|
|
algoChoice = raw_input('Which hashing algorithm? ')
|
|
|
|
if algoChoice in algoList:
|
|
|
|
hasher = hashlib.new(algoChoice)
|
|
|
|
else:
|
|
|
|
print("That's no algorithm!")
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
if (typeChoice == 'f'):
|
|
|
|
filePath = raw_input('Please input a fully qualified path: ')
|
|
|
|
filePath = filePath.strip()
|
|
|
|
with open(filePath, 'rb') as hashFile:
|
|
|
|
content = hashFile.read()
|
|
|
|
hasher.update(content)
|
|
|
|
else:
|
|
|
|
inputString = raw_input('Please input a string: ')
|
|
|
|
hasher.update(inputString)
|
|
|
|
print(hasher.hexdigest())
|
|
|
|
|
|
|
|
print("Welcome aboard PankiCrypt Airlines!")
|
|
|
|
print("How may we serve you today?")
|
|
|
|
print("1: ROT/Ceasar Encryption")
|
|
|
|
print("2: Hashing functions")
|
|
|
|
print("3: Translation")
|
|
|
|
print("4: Base64 Encoder/Decoder")
|
|
|
|
choice = input("Please make a selection: ")
|
|
|
|
if (choice == 1):
|
|
|
|
rotPrompt()
|
|
|
|
elif (choice == 2):
|
|
|
|
hashPrompt()
|
|
|
|
elif (choice == 3):
|
|
|
|
translatePrompt()
|
|
|
|
elif(choice == 4):
|
|
|
|
base64prompt()
|
|
|
|
print("Thank you for flying with PankiCrypt Airlines!")
|
|
|
|
|