during class commit

py3
7 years ago
parent 3630a61186
commit 68c6fbb5c4

@ -1,323 +1,323 @@
#!/usr/bin/env python #!/usr/bin/env python
import sys, string, types, hashlib, base64, re, urllib, binascii import sys, string, types, hashlib, base64, re, urllib, binascii
import operator import operator
from collections import Counter from collections import Counter
LOWER_LETTERS = [chr(x) for x in range(97, 123)] LOWER_LETTERS = [chr(x) for x in range(97, 123)]
UPPER_LETTERS = [chr(x) for x in range(65, 91)] UPPER_LETTERS = [chr(x) for x in range(65, 91)]
COMMON_LETTERS = 'ETAOIN SHRDLU' COMMON_LETTERS = 'ETAOIN SHRDLU'
def xorRepeating(): def xorRepeating():
plain = raw_input('Please input your Plaintext: ') plain = raw_input('Please input your Plaintext: ')
key = raw_input('Key: ') key = raw_input('Key: ')
hexkey = list() hexkey = list()
i = 0 i = 0
for c in key: for c in key:
print(i) print(i)
hexkey.append(ord(c)) hexkey.append(ord(c))
i += 1 i += 1
resultString = '' resultString = ''
i = 0 i = 0
for char in plain: for char in plain:
resultString += str(hex(ord(char) ^ hexkey[i]))[2:] resultString += str(hex(ord(char) ^ hexkey[i]))[2:]
i += 1 i += 1
if i == len(key): if i == len(key):
i = 0 i = 0
print(resultString) print(resultString)
def xorBrutePrompt(): def xorBrutePrompt():
isfile = (raw_input('f for file; for string:') == 'f') isfile = (raw_input('f for file; for string:') == 'f')
maxresults = input('How many top hits? ') maxresults = input('How many top hits? ')
keylength = input('Maximum key length in bytes: ') keylength = input('Maximum key length in bytes: ')
if isfile: if isfile:
path = raw_input('path: ') path = raw_input('path: ')
path = path.strip() path = path.strip()
results = list() results = list()
with open(path, 'r') as file: with open(path, 'r') as file:
contents = file.readlines() contents = file.readlines()
contents = [line.strip() for line in contents] contents = [line.strip() for line in contents]
for code in contents: for code in contents:
recursiveResult = xorSingleBrute(code, maxresults, keylength) recursiveResult = xorSingleBrute(code, maxresults, keylength)
#nach Punkten aufsteigend sortieren: #nach Punkten aufsteigend sortieren:
sortedList = sorted(recursiveResult.items(), key=operator.itemgetter(1))[-maxresults:] sortedList = sorted(recursiveResult.items(), key=operator.itemgetter(1))[-maxresults:]
#Liste in maximalwert dieser als Tupel anhaengen: #Liste in maximalwert dieser als Tupel anhaengen:
results.append((sortedList, max(recursiveResult.iteritems(), key=operator.itemgetter(1))[1])) results.append((sortedList, max(recursiveResult.iteritems(), key=operator.itemgetter(1))[1]))
#sortieren nach MaxWert: #sortieren nach MaxWert:
sortedResults = sorted(results, key=operator.itemgetter(1)) sortedResults = sorted(results, key=operator.itemgetter(1))
for item in sortedResults: for item in sortedResults:
#da tupel muss so iteriert werden: #da tupel muss so iteriert werden:
for tupel in item[::2]: for tupel in item[::2]:
for i in tupel: for i in tupel:
print(i[0]) print(i[0])
else: else:
encoded = raw_input('Input your Hex String: ') encoded = raw_input('Input your Hex String: ')
result = xorSingleBrute(encoded, maxresults, keylength) result = xorSingleBrute(encoded, maxresults, keylength)
sortedResults = sorted(result.items(), key=operator.itemgetter(1))[-maxresults:] sortedResults = sorted(result.items(), key=operator.itemgetter(1))[-maxresults:]
for i, j in sortedResults: for i, j in sortedResults:
print(i) print(i)
def xorSingleBrute(encoded='', maxresults=20, keybytes=1): def xorSingleBrute(encoded='', maxresults=20, keybytes=1):
resultDict = dict() resultDict = dict()
if(encoded == ''): if(encoded == ''):
isfile = (raw_input('f for file; for string:') == 'f') isfile = (raw_input('f for file; for string:') == 'f')
for xor_key in range(0, 2**(keybytes*8)): for xor_key in range(0, 2**(keybytes*8)):
decoded = ''; decoded = '';
for i, j in zip(encoded[::2], encoded[1::2]): for i, j in zip(encoded[::2], encoded[1::2]):
decoded += ''.join(chr(int(i+j, 16) ^ xor_key)) decoded += ''.join(chr(int(i+j, 16) ^ xor_key))
resultDict[decoded] = commonCounter(decoded) resultDict[decoded] = commonCounter(decoded)
return resultDict return resultDict
def commonCounter(inputString, limit=7): def commonCounter(inputString, limit=7):
countObj = Counter(inputString.upper()) countObj = Counter(inputString.upper())
common = countObj & Counter(COMMON_LETTERS) common = countObj & Counter(COMMON_LETTERS)
return sum(common.values()) return sum(common.values())
def fixedxor(string1 = '', string2 = ''): def fixedxor(string1 = '', string2 = ''):
if(string1 == ''): if(string1 == ''):
string1 = raw_input('Please input your first hex string: ') string1 = raw_input('Please input your first hex string: ')
string2 = raw_input('Please input your second hex string: ') string2 = raw_input('Please input your second hex string: ')
hex1 = int(string1, 16) hex1 = int(string1, 16)
hex2 = int(string2, 16) hex2 = int(string2, 16)
result = hex1 ^ hex2 result = hex1 ^ hex2
print(hex(result)) print(hex(result))
def rot(inputString, amount): def rot(inputString, amount):
outputString = '' outputString = ''
for char in inputString: for char in inputString:
resultChar = '' resultChar = ''
if char.isupper(): if char.isupper():
index = UPPER_LETTERS.index(char) index = UPPER_LETTERS.index(char)
resultChar = UPPER_LETTERS[(index + amount)%len(UPPER_LETTERS)] resultChar = UPPER_LETTERS[(index + amount)%len(UPPER_LETTERS)]
elif char.islower(): elif char.islower():
index = LOWER_LETTERS.index(char) index = LOWER_LETTERS.index(char)
resultChar = LOWER_LETTERS[(index + amount) % len(LOWER_LETTERS)] resultChar = LOWER_LETTERS[(index + amount) % len(LOWER_LETTERS)]
else: else:
resultChar = char resultChar = char
outputString += resultChar outputString += resultChar
return outputString return outputString
def translate(inputString, inputType, outputType): def translate(inputString, inputType, outputType):
result = '' result = ''
if(inputType == outputType): if(inputType == outputType):
result = inputString result = inputString
return result return result
if (inputType == 5): if (inputType == 5):
for char in inputString: for char in inputString:
if(outputType == 1): if(outputType == 1):
result += bin(ord(char)) + ' ' result += bin(ord(char)) + ' '
elif(outputType == 2): elif(outputType == 2):
result += ord(char) + ' ' result += ord(char) + ' '
elif(outputType == 3): elif(outputType == 3):
result += oct(ord(char)) + ' ' result += oct(ord(char)) + ' '
elif(outputType == 4): elif(outputType == 4):
result += hex(ord(char)) + ' ' result += hex(ord(char)) + ' '
else: else:
result = inputString result = inputString
break break
return result return result
elif(inputType == 1): elif(inputType == 1):
inputString = int(inputString, 2) inputString = int(inputString, 2)
elif(inputType == 2): elif(inputType == 2):
inputString = int(inputString) inputString = int(inputString)
elif(inputType == 3): elif(inputType == 3):
inputString = int(inputString, 8) inputString = int(inputString, 8)
elif(inputType == 4): elif(inputType == 4):
inputString = int(inputString, 16) inputString = int(inputString, 16)
if(outputType == 1): if(outputType == 1):
result = bin(inputString) result = bin(inputString)
elif(outputType == 2): elif(outputType == 2):
result = inputString result = inputString
elif(outputType == 3): elif(outputType == 3):
result = oct(inputString) result = oct(inputString)
elif(outputType == 4): elif(outputType == 4):
result = hex(inputString) result = hex(inputString)
elif(outputType == 5): elif(outputType == 5):
result = chr(inputString) result = chr(inputString)
return result return result
def zeroWidthString(inputstring): def zeroWidthString(inputstring):
resultstring = '>' resultstring = '>'
binary = translate(inputstring, 5, 1) binary = translate(inputstring, 5, 1)
binaryArray = binary.split(" ") binaryArray = binary.split(" ")
print (binaryArray) print (binaryArray)
for byte in binaryArray: for byte in binaryArray:
for bit in byte[2:10]: for bit in byte[2:10]:
if(bit == '1'): if(bit == '1'):
resultstring+= u'\u200b' #zero-width space resultstring+= u'\u200b' #zero-width space
else: else:
resultstring+= u'\u200d' #zero-width joiner resultstring+= u'\u200d' #zero-width joiner
resultstring += '<' resultstring += '<'
print resultstring print resultstring
def resolveZeroWidthString(inputstring): def resolveZeroWidthString(inputstring):
charfound = False charfound = False
binarystring = '' binarystring = ''
resultstring = '' resultstring = ''
inputstring = inputstring.decode('unicode-escape') inputstring = inputstring.decode('unicode-escape')
for char in inputstring: for char in inputstring:
print char print char
if char == u'\u200b': if char == u'\u200b':
binarystring += '1' binarystring += '1'
elif char == u'\u200d': elif char == u'\u200d':
binarystring += '0' binarystring += '0'
for byte in binarystring[::8]: for byte in binarystring[::8]:
resultstring += translate(byte, 1, 5) resultstring += translate(byte, 1, 5)
print resultstring print resultstring
def vignere(plain, key): def vignere(plain, key):
i = 0 i = 0
result = '' result = ''
plain = plain.upper() plain = plain.upper()
key = key.upper() key = key.upper()
for char in plain: for char in plain:
if char in UPPER_LETTERS: if char in UPPER_LETTERS:
result += chr( (((ord(char)) + (ord(key[i])))%26)+65) result += chr( (((ord(char)) + (ord(key[i])))%26)+65)
i += 1 i += 1
if (i == len(key)): if (i == len(key)):
i = 0 i = 0
else: else:
result += '.' result += '.'
return result return result
def string2bin(input): def string2bin(input):
return ''.join(format(ord(x), 'b').zfill(8) for x in input) return ''.join(format(ord(x), 'b').zfill(8) for x in input)
def hammingDistance(string1, string2): def hammingDistance(string1, string2):
diffs = 0 diffs = 0
bin1 = string2bin(string1) bin1 = string2bin(string1)
bin2 = string2bin(string2) bin2 = string2bin(string2)
for b1, b2 in zip(bin1, bin2): for b1, b2 in zip(bin1, bin2):
if b1 != b2: if b1 != b2:
diffs += 1 diffs += 1
return diffs return diffs
def urlEncoder(): def urlEncoder():
input = raw_input('Pleae input your String: ') input = raw_input('Pleae input your String: ')
print(urllib.quote_plus(input)) print(urllib.quote_plus(input))
def reverser(): def reverser():
string = raw_input('Please input your string to reverse:') string = raw_input('Please input your string to reverse:')
print(string[::-1]) print(string[::-1])
def base64prompt(): def base64prompt():
b64regex = '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$' b64regex = '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
isfile = (raw_input('f for file, s for string: ') == 'f') isfile = (raw_input('f for file, s for string: ') == 'f')
if isfile: if isfile:
path = raw_input('Path: ') path = raw_input('Path: ')
path = path.strip() path = path.strip()
outputPath = raw_input('Output file: ') outputPath = raw_input('Output file: ')
with open(path, 'r') as file: with open(path, 'r') as file:
contents = file.read() contents = file.read()
file.close() file.close()
#contents = [line.strip() for line in contents] #contents = [line.strip() for line in contents]
decoded = base64.b64decode(contents) decoded = base64.b64decode(contents)
with open(outputPath, 'w') as outfile: with open(outputPath, 'w') as outfile:
#for line in contents: #for line in contents:
outfile.write(decoded) outfile.write(decoded)
outfile.close() outfile.close()
else: else:
inputString = raw_input('Please input your string: ') inputString = raw_input('Please input your string: ')
if (re.match(b64regex, inputString)): if (re.match(b64regex, inputString)):
print(base64.b64decode(inputString)) print(base64.b64decode(inputString))
else: else:
print(base64.b64encode(inputString)) print(base64.b64encode(inputString))
def rotPrompt(): def rotPrompt():
choice = input('What kind of ROT do you want to perform? 1-25, or all: ') choice = input('What kind of ROT do you want to perform? 1-25, or all: ')
userInput = raw_input('Please insert a string: ') userInput = raw_input('Please insert a string: ')
if type(choice) is types.IntType: if type(choice) is types.IntType:
print(rot(userInput, choice)) print(rot(userInput, choice))
else: else:
for i in range(0, 26): for i in range(0, 26):
print(rot(userInput, i)) print(rot(userInput, i))
def translatePrompt(): def translatePrompt():
print('1: Binary') print('1: Binary')
print('2: Decimal') print('2: Decimal')
print('3: Octal') print('3: Octal')
print('4: Hexadecimal') print('4: Hexadecimal')
print('5: ASCII') print('5: ASCII')
inputType = input('Please specify input type: ') inputType = input('Please specify input type: ')
outputType = input('Please specify output type: ') outputType = input('Please specify output type: ')
if (inputType == 5): if (inputType == 5):
inputString = raw_input('Please input your strings, seperated by semicolon: ') inputString = raw_input('Please input your strings, seperated by semicolon: ')
else: else:
inputString = raw_input('Please input your values, seperated by semicolon: ') inputString = raw_input('Please input your values, seperated by semicolon: ')
inputList = inputString.split(';') inputList = inputString.split(';')
for entry in inputList: for entry in inputList:
print(str(translate(entry, inputType, outputType))) print(str(translate(entry, inputType, outputType)))
def hashPrompt(): def hashPrompt():
typeChoice = raw_input('Would you like to hash a file or a String? f for file, s for string: ') typeChoice = raw_input('Would you like to hash a file or a String? f for file, s for string: ')
algoList = hashlib.algorithms_available algoList = hashlib.algorithms_available
for word in algoList: for word in algoList:
print(word) print(word)
algoChoice = raw_input('Which hashing algorithm? ') algoChoice = raw_input('Which hashing algorithm? ')
if algoChoice in algoList: if algoChoice in algoList:
hasher = hashlib.new(algoChoice) hasher = hashlib.new(algoChoice)
else: else:
print('That\'s no algorithm!') print('That\'s no algorithm!')
sys.exit(0) sys.exit(0)
if (typeChoice == 'f'): if (typeChoice == 'f'):
filePath = raw_input('Please input a fully qualified path: ') filePath = raw_input('Please input a fully qualified path: ')
filePath = filePath.strip() filePath = filePath.strip()
with open(filePath, 'rb') as hashFile: with open(filePath, 'rb') as hashFile:
content = hashFile.read() content = hashFile.read()
hasher.update(content) hasher.update(content)
else: else:
inputString = raw_input('Please input a string: ') inputString = raw_input('Please input a string: ')
hasher.update(inputString) hasher.update(inputString)
print(hasher.hexdigest()) print(hasher.hexdigest())
print('Welcome aboard PankiCrypt Airlines!') print('Welcome aboard PankiCrypt Airlines!')
print('How may we serve you today?') print('How may we serve you today?')
print('1: ROT/Ceasar Encryption') print('1: ROT/Ceasar Encryption')
print('2: Hashing functions') print('2: Hashing functions')
print('3: Translation') print('3: Translation')
print('4: Base64 Encoder/Decoder') print('4: Base64 Encoder/Decoder')
print('5: String Reverser') print('5: String Reverser')
print('6: URL Encoder') print('6: URL Encoder')
print('7: Fixed XOR') print('7: Fixed XOR')
print('8: XOR Bruteforce Single Byte ') print('8: XOR Bruteforce Single Byte ')
print('9: XOR Repeating Key') print('9: XOR Repeating Key')
print('10: Zero-Width String') print('10: Zero-Width String')
print('11: Resolve Zero-Width Strings') print('11: Resolve Zero-Width Strings')
choice = raw_input('Please make a selection: ') choice = raw_input('Please make a selection: ')
if (choice == '1'): if (choice == '1'):
rotPrompt() rotPrompt()
elif (choice == '2'): elif (choice == '2'):
hashPrompt() hashPrompt()
elif (choice == '3'): elif (choice == '3'):
translatePrompt() translatePrompt()
elif(choice == '4'): elif(choice == '4'):
base64prompt() base64prompt()
elif(choice == '5'): elif(choice == '5'):
reverser() reverser()
elif(choice == '6'): elif(choice == '6'):
urlEncoder() urlEncoder()
elif(choice[0] == '7'): elif(choice[0] == '7'):
if(len(choice) > 1): if(len(choice) > 1):
argList = choice.split(' ') argList = choice.split(' ')
fixedxor(argList[1], argList[2]) fixedxor(argList[1], argList[2])
else: else:
fixedxor() fixedxor()
elif(choice == '8'): elif(choice == '8'):
#xorSingleBrute() #xorSingleBrute()
xorBrutePrompt() xorBrutePrompt()
elif(choice == '9'): elif(choice == '9'):
xorRepeating() xorRepeating()
elif(choice == '10'): elif(choice == '10'):
i = raw_input('String:') i = raw_input('String:')
zeroWidthString(i) zeroWidthString(i)
elif(choice == '11'): elif(choice == '11'):
i = raw_input('String:') i = raw_input('String:')
resolveZeroWidthString(i) resolveZeroWidthString(i)
print('Thank you for flying with PankiCrypt Airlines!') print('Thank you for flying with PankiCrypt Airlines!')

Loading…
Cancel
Save