예제 #1
0
def result_page():
    """Returns result page with encoded or decoded
    message"""
    keyword = request.form['keyword']
    choice = request.form['choice']
    message = request.form['message']
    cipher = VigenereCipher(keyword)
    if choice == 'encode':
        result = cipher.encode(message)
    else:
        result = cipher.decode(message)
    if result is None:
        return render_template('exception.html')
    return render_template('result.html', result=result)
예제 #2
0
class TestDecryptString(unittest.TestCase):
  
  def setUp(self):
    self.msg = VigenereCipher(KEY, CIPHERTEXT)
  
  def test_isinstance(self):
    self.assertIsInstance(self.msg, VigenereCipher)
  
  def test_isequals(self):
    check = self.msg.decrypt()
    expect = PLAINTEXT
    self.assertEquals(check, expect)
예제 #3
0
 def test_combine_character_1(self):
     self.assertTrue(VigenereCipher.combine_character("E", "T") == "X")
예제 #4
0
 def test_encode_spaces(self):
     cipher = VigenereCipher("TRAIN")
     encoded = cipher.encode("ENCODED IN PYTHON")
     self.assertTrue(encoded == "XECWQXUIVCRKHWA")
예제 #5
0
 def test_encode_2(self):
     cipher = VigenereCipher("LeaRNinG")
     encoded = cipher.encode("LeaRNINGpyThON")
     assert encoded == "WIAIAQAMACTYBV"
def test_decode():
    cipher = VigenereCipher('TRAIN')
    decode = cipher.decode('XECWQXUIVCRKHWA')
    assert decode == 'ENCODEDINPYTHON'
from unittest import TestCase
from vigenere_cipher import VigenereCipher
ex = VigenereCipher('csucu')


class TestVigenereCipher(TestCase):
    def test_vigenere_cipher(self):
        self.assertEquals('A', ex.combine_character('h', 'a'), "fail")
        self.assertEquals('E', ex.combine_character('P', 'p'), "fail")
        self.assertEquals('Z', ex.combine_character('Y', 'B'), "fail")
        self.assertEquals(None, ex.combine_character('-', 'd'), "fail")
        self.assertEquals('C', ex.separate_character('a', 'y'), "fail")
        self.assertEquals(None, ex.separate_character(',', 'O'), "fail")
        self.assertEquals('H', ex.separate_character('L', 'e'), "fail")
        self.assertEquals(None, ex.separate_character('s', '!'), "fail")
        self.assertEquals('CSUCUCSUCU', ex.extend_keyword(10), "fail")
        self.assertEquals('', ex.extend_keyword(0), "fail")
        self.assertEquals('SSXYOLQGLIYBNMRGKALOTMXQORG',
                          ex.decode('ukrainiancatholicuniversity'), "fail")
        self.assertEquals('WCLCCPAUPWCLBQFKUOPCXWLUCVQ',
                          ex.encode('ukrainiancatholicuniversity'), "fail")
        self.assertEquals('', ex.encode(''), "fail")
        self.assertEquals('', ex.decode(''), "fail")
예제 #8
0
 def test_encode_1(self):
     cipher = VigenereCipher("TRAIN")
     encoded = cipher.encode("ENCODEDINPYTHON")
     assert encoded == "XECWQXUIVCRKHWA"
def test_encode_charecter():
	cipher = VigenereCipher("TRAIN")
	encoded = cipher.encode("E")
	assert encoded == "X"
def test_encode():
	cipher = VigenereCipher("TRAIN")
	encoded = cipher.encode("ENCODEDINPYTHON")
	assert encoded == "XECWQXUIVCRKHWA"
def test_decode():
	cipher = VigenereCipher("TRAIN")
	decoded = cipher.decode("XECWQXUIVCRKHWA")
	assert decoded == "ENCODEDINPYTHON"
def test_extend_keyword():
	cipher = VigenereCipher("TRAIN")
	extended = cipher.extend_keyword(16)
	assert extended == "TRAINTRAINTRAINT"
def test_encode_lowercase():
	cipher = VigenereCipher("TRain")
	encoded = cipher.encode("encoded in Python")
	assert encoded == "XECWQXUIVCRKHWA"
예제 #14
0
from polyalphabetic_cipher import PolyalphabeticCipher
from monoalphabetic_cipher import MonoalphabeticCipher
from vigenere_cipher import VigenereCipher
from common.frequency_analysis import LetterFrequency
from common.kasiski_test import KasiskiTest
from hill_system import HillSystem

messages = ["MFE RLH WSR LHW BZN BNW SRX DEC INQ RNW JHL RBW BNL DER HQN DEQ BUJ WSH UZS RNN LDE RDA HJH LQC RWS HUM DTR EHU ICH NWN CDU JRE WSH ULD UDM DCP BWN AER RBW ZHU QRM CHP RIH UPX SRE RHE ZSB LRI RNI BIB WBU HQH WSW FQ", "YBR GPT OOY CBC GUG SNR TCW MVF RMU GJC MUI RCC UZV LJX BAJ DNU RTJ LLF KFF YBL JMZ NWG YNY JYB RRV HCG VLL MGH DKB NCN JHF NRW YNY JDV VTL ZGO RPX IAR QBY PNL YYI RLG YTV LYI GUG SEN OMZ NVA YSS IRP DXR SGS CGR UFS BHP GLN VLX BNI CJP BYT JXG BEJ NHF MZN BSR MYE NGS ZVA BBB REC YBR OCW LVR QFL RNL IER RNZ MSE MRA RGR NHT XGQ FRQ MZL OEY NHF QGI HBG CAI YIC YIU RJU OFT PFM CEC FFY LJF LTR LZG ORP XIE GMQ IBX YYN UVL LMV AYM OAQ PJX GUM ZMN ABI CZR LXC BAQ", "OTG WRV RHU GXO XUQ UEK VYO TSE NYU NSI YSH MHB BUR ZTR CCD DAK MHC ALI OJZ UOT JYC KFN KIO THO GWK Z", "ESP PYR TYP PCE STY VDZ QST DPB FLE TZY DLD LYL AAC ZIT XLE TZY EZC PLW TEJ ESP ASJ DTN TDE EST YVD CPL WTE JTD LYL AAC ZIT XLE TZY EZS TDP BFL ETZ YDE SPX LES PXL ETN TLY OZP DYE NLC P"]#, "JAKXQ SWECW MMJBK TQMCM LWCXJ BNEWS XKRBO IAOBI NOMLJ GUIMH YTACF ICVOE BGOVC WYRCV KXJZV SMRXY VPOVB UBIJK OVCVK RXBOE ASZVR AOXQS WECVO QJHSG ROXWJ MCXQF OIRGZ VRAOJ RJOMB DBMVS CIESX MBDBM VSKRM GYFHA KXQSW ECWME UWXHD QDMXB KPUCN HWIWF NFCKA SKXNF DLJBY RNOBI YFSQN HRIYV IWRQS WCGKC BHRVN SSWYF SQNTS ZNWCT AWWIB SFIWW CTAWW IWWXI RGKRN LZIAW WIWHK PNFBS ASVIE SXMBD BMVSK RMGYC NGKPU CNHWI WFNFC KASKX NFDLJ BYRNO BIYFS QNHRI NBQMW SOVBO IWCVB INWCT AWWIO WFIRG ZVRAO WNJOR RGZVR AORRB OMBDB MVSOP NJORR GZVRA OXQWB XNSXM BDBMV SPMOH OIWWC TAWWI"] # book example problem to test vigenere code!
messages = ["ckaikmfmozgatywtzvchxhdyecszfzyidcmdjpfgtajalzoordvidbozcgszwcdlcsxxbltdisszacznuaozqczigdmmnnfweggrhshoozfzozdlcgfhsyymvtfzmmvahqjfppncmqxtooozfzmwrsoznjasrqkjvqjaoznjasrqkjwh".upper()]

polyCi = PolyalphabeticCipher()
monCi = MonoalphabeticCipher()
vigCi = VigenereCipher()
# do it all for me!
for msgNum, msg in enumerate(messages):   
    # 1. Find the Index of Coincidence and use it to decide which are most likely monoalphabetic (Note: I have specifically chosen messages so the IC is a good indicator of whether the message is monoalphabetic).
    msg = msg.replace(' ' , '')
    msgIC = polyCi.calcIC(msg)
    isPoly = polyCi.isPolyalphabetic(msgIC)
    
    print "\nAnalyzing message number %d: %s\n" % (msgNum+1, msg)
    print "Message IC: %.4f" % msgIC
    print "Message is likely %s\n" % ("polyalphabetic" if isPoly else "monoalphabetic")
    
    # 3. For the ones which you suspect aren't monoalphabetic, they have been encrypted either using a Vignere cipher or Hills system. In order to differentiate, we shall apply the standard Vignere tests for keyword - the messages have specifically been chosen so that a Hills system message will be recognizable by how these tests perform. 
    if isPoly:
        # (a) Find all repeated strings of lengths 3 or more and apply the Kasiski test.
        kt = KasiskiTest()        
        kasiskiFailed = False
        repeatedSubstrs = kt.getRepeatedSubstrs(msg, 3)     
        if repeatedSubstrs:
예제 #15
0
def test_encode_lowercase(valid_cipher):
    cipher = VigenereCipher("TRain")
    assert cipher.encode("encoded in Python") == "XECWQXUIVCRKHWA"
예제 #16
0
 def test_extend_keyword(self):
     cipher = VigenereCipher("TRAIN")
     extended = cipher.extend_keyword(16)
     self.assertTrue(extended == "TRAINTRAINTRAINT")
예제 #17
0
 def test_separate_character_2(self):
     self.assertTrue(VigenereCipher.separate_character("E", "R") == "N")
def test_encode_character():
    chip = VigenereCipher("TRAIN")
    encoded = chip.encode("E")
    assert "X" == encoded
def test_encode_lowercase():
    chip = VigenereCipher("TRAIN")
    encoded = chip.encode("encoded in python")
    assert "XECWQXUIVCRKHWA" == encoded
def test_extend_keyword():
    vigenere = VigenereCipher("TRAIN")
    extended = vigenere.extend_keyword(16)
    assert "TRAINTRAINTRAINT" == extended
def test_extend_keyword():
    cipher = VigenereCipher('TRAIN')
    extended = cipher.extend_keyword(16)
    assert extended == 'TRAINTRAINTRAINT'
def test_encode():
    chip = VigenereCipher("TRAIN")
    encoded = chip.encode("ENCODED IN PYTHON")
    assert "XECWQXUIVCRKHWA" == encoded
def test_encode_character():
    cipher = VigenereCipher('TRAIN')
    encoded = cipher.encode('E')
    assert encoded == 'X'
예제 #24
0
def test_encode_lowercase(valid_cipher):
    cipher = VigenereCipher("TRain")
    assert cipher.encode("encoded in Python") == "XECWQXUIVCRKHWA"
예제 #25
0
 def test_encode(self):
     cipher = VigenereCipher("TRAIN")
     encoded = cipher.encode("ENCODEDINPYTHON")
     self.assertEqual(encoded, "XECWQXUIVCRKHWA")
예제 #26
0
def pytest_funcarg__valid_cipher(request):
    return VigenereCipher("TRAIN")
예제 #27
0
 def test_encode_character(self):
     cipher = VigenereCipher("TRAIN")
     encoded = cipher.encode("E")
     self.assertTrue(encoded == "X")
예제 #28
0
 def test_encode_character():
     cipher = VigenereCipher("TRAIN")
     encoded = cipher.encode("E")
     assert encoded == "X"
예제 #29
0
 def test_encode_lowercase(self):
     cipher = VigenereCipher("TRain")
     encoded = cipher.encode("encoded in Python")
     self.assertTrue(encoded == "XECWQXUIVCRKHWA")
예제 #30
0
 def test_encode_lowercase():
     cipher = VigenereCipher("TRain")
     encoded = cipher.encode("encoded in Python")
     assert encoded == "XECWQXUIVCRKHWA"
예제 #31
0
 def test_combine_character_2(self):
     self.assertTrue(VigenereCipher.combine_character("N", "R") == "E")
예제 #32
0
 def test_extend_keyword():
     cipher = VigenereCipher("TRAIN")
     extended = cipher.extend_keyword(16)
     assert extended == "TRAINTRAINTRAINT"
예제 #33
0
 def test_separate_character_1(self):
     self.assertTrue(VigenereCipher.separate_character("X", "T") == "E")
예제 #34
0
 def test_decode():
     cipher = VigenereCipher("TRAIN")
     decoded = cipher.decode("XECWQXUIVCRKHWA")
     assert decoded == "ENCODEDINPYTHON"
예제 #35
0
 def test_decode(self):
     cipher = VigenereCipher("TRAIN")
     decoded = cipher.decode("XECWQXUIVCRKHWA")
     self.assertTrue("ENCODEDINPYTHON" == decoded)
def test_encode_lowercase():
    cipher = VigenereCipher('TRain')
    encoded = cipher.encode('encoded in Python')
    assert encoded == 'XECWQXUIVCRKHWA'
예제 #37
0
 def setUp(self):
   self.msg = VigenereCipher(KEY, PLAINTEXT)
def test_encode():
    cipher = VigenereCipher('TRAIN')
    encoded = cipher.encode('ENCODEDINPYTHON')
    assert encoded == 'XECWQXUIVCRKHWA'
예제 #39
0
 def setUp(self):
   self.msg = VigenereCipher(KEY, CIPHERTEXT)
예제 #40
0
def cipher():
    return VigenereCipher("TRAIN")