import caesar, crackCyphers, vigenere, general
cyphers = ["caesar", "vigenere"]
def encrypt(cypher, msg, key):
crypt = ''
if cypher == "caesar":
crypt = caesar.encrypt(msg, int(key))
elif cypher == "vigenere":
crypt = vigenere.encrypt(msg, key)
else:
print 'cypher not found'
return 0
return crypt
def decrypt(cypher, crypt, key):
msg = ''
if cypher == "caesar":
msg = caesar.decrypt(crypt, int(key))
elif cypher == "vigenere":
msg = vigenere.decrypt(crypt, key)
else:
print 'cypher not found'
return 0
return msg
def crack(cypher, crypt):
if cypher == "caesar":
crackCyphers.caesarBreak(crypt)
elif cypher == "vigenere":
crackCyphers.vigenereBreak(crypt)
else:
print 'cypher not found'
return 0
def inputCypher():
c = raw_input("Please enter cypher: ")
if c.lower() == "caesar" or c.lower() == "ceasar" or c.lower() == "c" or c.lower() == "caeser" or c.lower() == "ceaser":
return "caesar"
elif c.lower() == "vig" or c.lower() == "vigenere" or c.lower() == "v":
return "vigenere"
else:
print "----That cypher is not in our records. Please make sure it is spelled correctly"
print "----Cyphers include: caesar, vigenere"
return inputCypher()
def inputEncrypt():
cypher = inputCypher()
msg = raw_input("Please enter message: ")
key = raw_input("Please enter key: ")
print encrypt(cypher, msg, key)
def inputDecrypt():
cypher = inputCypher()
crypt = raw_input("Please enter message: ")
key = raw_input("Please enter key: ")
print decrypt(cypher, crypt, key)
def inputCrack():
cypher = inputCypher()
crypt = raw_input("Please enter crypt: ")
crack(cypher, crypt)
# inputDecrypt()
# inputCrack()
# crack("caesar", "wtip qba WAPMZ pwe'a qb owqvo?")
# key = general.numString(general.numstr('43785018456823945619510017465812947'))
# string = ''
# for k in key:
# string += k
# print string
# print decrypt('vigenere','NBIGMTSGZDMHYQTDTITIFDYIRPDCOWMMZOX',string)
print general.hexToString("49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d").encode("base64")
aW1wb3J0IGNhZXNhciwgY3JhY2tDeXBoZXJzLCB2aWdlbmVyZSwgZ2VuZXJhbAoKY3lwaGVycyA9IFsiY2Flc2FyIiwgInZpZ2VuZXJlIl0KCmRlZiBlbmNyeXB0KGN5cGhlciwgbXNnLCBrZXkpOgogICAgY3J5cHQgPSAnJwogICAgaWYgY3lwaGVyID09ICJjYWVzYXIiOgogICAgICAgIGNyeXB0ID0gY2Flc2FyLmVuY3J5cHQobXNnLCBpbnQoa2V5KSkKICAgIGVsaWYgY3lwaGVyID09ICJ2aWdlbmVyZSI6CiAgICAgICAgY3J5cHQgPSB2aWdlbmVyZS5lbmNyeXB0KG1zZywga2V5KQogICAgZWxzZToKICAgICAgICBwcmludCAnY3lwaGVyIG5vdCBmb3VuZCcKICAgICAgICByZXR1cm4gMAogICAgcmV0dXJuIGNyeXB0CgpkZWYgZGVjcnlwdChjeXBoZXIsIGNyeXB0LCBrZXkpOgogICAgbXNnID0gJycKICAgIGlmIGN5cGhlciA9PSAiY2Flc2FyIjoKICAgICAgICBtc2cgPSBjYWVzYXIuZGVjcnlwdChjcnlwdCwgaW50KGtleSkpCiAgICBlbGlmIGN5cGhlciA9PSAidmlnZW5lcmUiOgogICAgICAgIG1zZyA9IHZpZ2VuZXJlLmRlY3J5cHQoY3J5cHQsIGtleSkKICAgIGVsc2U6CiAgICAgICAgcHJpbnQgJ2N5cGhlciBub3QgZm91bmQnCiAgICAgICAgcmV0dXJuIDAKICAgIHJldHVybiBtc2cKCmRlZiBjcmFjayhjeXBoZXIsIGNyeXB0KToKICAgIGlmIGN5cGhlciA9PSAiY2Flc2FyIjoKICAgICAgICBjcmFja0N5cGhlcnMuY2Flc2FyQnJlYWsoY3J5cHQpCiAgICBlbGlmIGN5cGhlciA9PSAidmlnZW5lcmUiOgogICAgICAgIGNyYWNrQ3lwaGVycy52aWdlbmVyZUJyZWFrKGNyeXB0KQogICAgZWxzZToKICAgICAgICBwcmludCAnY3lwaGVyIG5vdCBmb3VuZCcKICAgICAgICByZXR1cm4gMAoKZGVmIGlucHV0Q3lwaGVyKCk6CiAgICBjID0gcmF3X2lucHV0KCJQbGVhc2UgZW50ZXIgY3lwaGVyOiAiKQogICAgaWYgYy5sb3dlcigpID09ICJjYWVzYXIiIG9yIGMubG93ZXIoKSA9PSAiY2Vhc2FyIiBvciBjLmxvd2VyKCkgPT0gImMiIG9yIGMubG93ZXIoKSA9PSAiY2Flc2VyIiBvciBjLmxvd2VyKCkgPT0gImNlYXNlciI6CiAgICAgICAgcmV0dXJuICJjYWVzYXIiCiAgICBlbGlmIGMubG93ZXIoKSA9PSAidmlnIiBvciBjLmxvd2VyKCkgPT0gInZpZ2VuZXJlIiBvciBjLmxvd2VyKCkgPT0gInYiOgogICAgICAgIHJldHVybiAidmlnZW5lcmUiCiAgICBlbHNlOgogICAgICAgIHByaW50ICItLS0tVGhhdCBjeXBoZXIgaXMgbm90IGluIG91ciByZWNvcmRzLiBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIHNwZWxsZWQgY29ycmVjdGx5IgogICAgICAgIHByaW50ICItLS0tQ3lwaGVycyBpbmNsdWRlOiBjYWVzYXIsIHZpZ2VuZXJlIgogICAgICAgIHJldHVybiBpbnB1dEN5cGhlcigpCgpkZWYgaW5wdXRFbmNyeXB0KCk6CiAgICBjeXBoZXIgPSBpbnB1dEN5cGhlcigpCiAgICBtc2cgPSByYXdfaW5wdXQoIlBsZWFzZSBlbnRlciBtZXNzYWdlOiAiKQogICAga2V5ID0gcmF3X2lucHV0KCJQbGVhc2UgZW50ZXIga2V5OiAiKQogICAgcHJpbnQgZW5jcnlwdChjeXBoZXIsIG1zZywga2V5KQoKZGVmIGlucHV0RGVjcnlwdCgpOgogICAgY3lwaGVyID0gaW5wdXRDeXBoZXIoKQogICAgY3J5cHQgPSByYXdfaW5wdXQoIlBsZWFzZSBlbnRlciBtZXNzYWdlOiAiKQogICAga2V5ID0gcmF3X2lucHV0KCJQbGVhc2UgZW50ZXIga2V5OiAiKQogICAgcHJpbnQgZGVjcnlwdChjeXBoZXIsIGNyeXB0LCBrZXkpCgpkZWYgaW5wdXRDcmFjaygpOgogICAgY3lwaGVyID0gaW5wdXRDeXBoZXIoKQogICAgY3J5cHQgPSByYXdfaW5wdXQoIlBsZWFzZSBlbnRlciBjcnlwdDogIikKICAgIGNyYWNrKGN5cGhlciwgY3J5cHQpCgojIGlucHV0RGVjcnlwdCgpCiMgaW5wdXRDcmFjaygpCiMgY3JhY2soImNhZXNhciIsICJ3dGlwIHFiYSBXQVBNWiBwd2UnYSBxYiBvd3F2bz8iKQojIGtleSA9IGdlbmVyYWwubnVtU3RyaW5nKGdlbmVyYWwubnVtc3RyKCc0Mzc4NTAxODQ1NjgyMzk0NTYxOTUxMDAxNzQ2NTgxMjk0NycpKQojIHN0cmluZyA9ICcnCiMgZm9yIGsgaW4ga2V5OgojICAgICBzdHJpbmcgKz0gawojIHByaW50IHN0cmluZwojIHByaW50IGRlY3J5cHQoJ3ZpZ2VuZXJlJywnTkJJR01UU0daRE1IWVFURFRJVElGRFlJUlBEQ09XTU1aT1gnLHN0cmluZykKcHJpbnQgZ2VuZXJhbC5oZXhUb1N0cmluZygiNDkyNzZkMjA2YjY5NmM2YzY5NmU2NzIwNzk2Zjc1NzIyMDYyNzI2MTY5NmUyMDZjNjk2YjY1MjA2MTIwNzA2ZjY5NzM2ZjZlNmY3NTczMjA2ZDc1NzM2ODcyNmY2ZjZkIikuZW5jb2RlKCJiYXNlNjQiKQoKCgo=