ex01_crypto
						commit
						2efb988f33
					
				| @ -0,0 +1 @@ | |||||||
|  | Put your `report.pdf` here. | ||||||
| @ -0,0 +1,123 @@ | |||||||
|  | #!/usr/bin/env python3 | ||||||
|  | 
 | ||||||
|  | ''' | ||||||
|  | @author: Christian Wressnegger | ||||||
|  | ''' | ||||||
|  | 
 | ||||||
|  | try: | ||||||
|  |     # For evaluating the exercises we'll provide a similar but | ||||||
|  |     # different configuration that contains alternative input | ||||||
|  |     # values than those provided in the script that was handed | ||||||
|  |     # out (nothing mean though). Develop your solution robust | ||||||
|  |     # enough to work with various kinds and variations of input. | ||||||
|  |     import ex01_testdata_lecturer as testdata  # @UnresolvedImport @UnusedImport | ||||||
|  | 
 | ||||||
|  | except: | ||||||
|  |     import ex01_testdata as testdata  # @UnusedImport | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import filecmp | ||||||
|  | import os | ||||||
|  | import subprocess | ||||||
|  | import sys | ||||||
|  | import tempfile | ||||||
|  | import unittest | ||||||
|  | 
 | ||||||
|  | unittest.TestLoader.sortTestMethodsUsing = None | ||||||
|  | PYTHON = "python3" | ||||||
|  | PYERROR = "For running your solutions we call '{}'.\nThe name might be different for your installation (e.g. on Windows)\n" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Ex01(unittest.TestCase): | ||||||
|  | 
 | ||||||
|  |     TASKS = 0 | ||||||
|  |     MY_DIR = os.path.dirname(os.path.abspath(__file__)) | ||||||
|  | 
 | ||||||
|  |     @staticmethod | ||||||
|  |     def call(tool, params): | ||||||
|  |         script = os.path.join(Ex01.MY_DIR, tool) | ||||||
|  |         cmd = '{} "{}" {}'.format(PYTHON, script, params) | ||||||
|  | 
 | ||||||
|  |         p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) | ||||||
|  |         out, _ = p.communicate() | ||||||
|  | 
 | ||||||
|  |         if p.returncode != 0: | ||||||
|  |             sys.stderr.write(PYERROR.format(PYTHON)) | ||||||
|  | 
 | ||||||
|  |         return out, p.returncode | ||||||
|  | 
 | ||||||
|  |     @staticmethod | ||||||
|  |     def tmpfile(): | ||||||
|  |         fd, fname = tempfile.mkstemp(dir=Ex01.MY_DIR) | ||||||
|  |         os.close(fd) | ||||||
|  |         return fname | ||||||
|  | 
 | ||||||
|  |     def _check_encrypttool(self, tool, x, s=slice(0, None)): | ||||||
|  |         for alphabet, a, b in testdata.TOOL_MAP[tool][x][s]: | ||||||
|  |             fname = Ex01.tmpfile() | ||||||
|  | 
 | ||||||
|  |             with open(fname, 'wb') as f: | ||||||
|  |                 f.write(a) | ||||||
|  |                 f.seek(0) | ||||||
|  | 
 | ||||||
|  |             out, _ = Ex01.call( | ||||||
|  |                 tool, '--{} {} "{}"'.format(x, alphabet, fname)) | ||||||
|  | 
 | ||||||
|  |             os.remove(fname) | ||||||
|  |             self.assertEqual(out.strip(), b, "wrong {}ion".format(x)) | ||||||
|  | 
 | ||||||
|  |     def _check_analysistool(self, tools, params=""): | ||||||
|  |         for plaintext, ciphertext in testdata.TOOL_MAP[tools[0]]: | ||||||
|  |             k, _ = Ex01.call(tools[0], '"{}" {}'.format(ciphertext, params)) | ||||||
|  |             k = k.strip().decode('ascii') | ||||||
|  | 
 | ||||||
|  |             self.assertTrue(len(k) > 0, "No key extracted") | ||||||
|  | 
 | ||||||
|  |             fname1, fname2 = Ex01.tmpfile(), Ex01.tmpfile() | ||||||
|  | 
 | ||||||
|  |             Ex01.call(tools[1], | ||||||
|  |                       '--decrypt {} "{}" --out "{}"'.format(k, ciphertext, fname1)) | ||||||
|  | 
 | ||||||
|  |             Ex01.call("mono/mono.py", | ||||||
|  |                       '--encrypt abcdefghijklmnopqrstuvwxyz "{}" --out "{}"'.format(plaintext, fname2)) | ||||||
|  | 
 | ||||||
|  |             ok = os.path.getsize(fname1) > 0 and filecmp.cmp(fname1, fname2) | ||||||
|  |             os.remove(fname1) | ||||||
|  |             os.remove(fname2) | ||||||
|  | 
 | ||||||
|  |             self.assertTrue(ok, "Incorrect key/ decryption :(") | ||||||
|  | 
 | ||||||
|  |     def test_04_mono(self): | ||||||
|  |         TOOL = "mono/mono.py" | ||||||
|  |         self._check_encrypttool(TOOL, "encrypt", slice(0, 1)) | ||||||
|  |         self._check_encrypttool(TOOL, "encrypt", slice(1, None)) | ||||||
|  |         self._check_encrypttool(TOOL, "decrypt") | ||||||
|  |         Ex01.TASKS += 1 | ||||||
|  | 
 | ||||||
|  |     def test_05_breakmono(self): | ||||||
|  |         TOOLS = ("mono/break_mono.py", "mono/mono.py") | ||||||
|  |         self._check_analysistool(TOOLS) | ||||||
|  |         Ex01.TASKS += 1 | ||||||
|  | 
 | ||||||
|  |     def test_06_vig(self): | ||||||
|  |         TOOL = "vigenere/vig.py" | ||||||
|  |         self._check_encrypttool(TOOL, "encrypt") | ||||||
|  |         self._check_encrypttool(TOOL, "decrypt") | ||||||
|  |         Ex01.TASKS += 1 | ||||||
|  | 
 | ||||||
|  |     def test_07_breakvig(self): | ||||||
|  |         TOOLS = ("vigenere/break_vig.py", "vigenere/vig.py") | ||||||
|  |         self._check_analysistool( | ||||||
|  |             TOOLS, "--keylen {}".format(testdata.BREAK_VIG_KEYLEN)) | ||||||
|  |         Ex01.TASKS += 1 | ||||||
|  |         pass | ||||||
|  | 
 | ||||||
|  |     def test_XX(self): | ||||||
|  |         if Ex01.TASKS > 0: | ||||||
|  |             print("[*] {} out of {} exercises work flawlessly! 👍".format(Ex01.TASKS, 4)) | ||||||
|  |         else: | ||||||
|  |             print("[*] Unfortunately, non of the exercises work as expected (yet 😉)") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     unittest.main() | ||||||
| @ -0,0 +1,45 @@ | |||||||
|  | ''' | ||||||
|  | @author: Christian Wressnegger | ||||||
|  | ''' | ||||||
|  | 
 | ||||||
|  | import os | ||||||
|  | MY_DIR = os.path.dirname(os.path.abspath(__file__)) | ||||||
|  | 
 | ||||||
|  | MONO = { | ||||||
|  |     "encrypt": [ | ||||||
|  |         ("abcdefghijklmnopqrstuvwxyz", b"Exercise 01", b"exercise"), | ||||||
|  |         ("vyjlnfubidxaqmshprwkgeoztc", | ||||||
|  |          b"Security exercises are fun", b"wnjgriktnznrjiwnwvrnfgm") | ||||||
|  |     ], | ||||||
|  |     "decrypt": [ | ||||||
|  |         ("vyjlnfubidxaqmshprwkgeoztc", | ||||||
|  |          b"wnjgriktnznrjiwnwvrnfgm", b"securityexercisesarefun") | ||||||
|  |     ] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | BREAK_MONO = { | ||||||
|  |     (os.path.join(MY_DIR, 'mono/plaintext.txt'), | ||||||
|  |      os.path.join(MY_DIR, 'mono/ciphertext.txt')) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | VIG = { | ||||||
|  |     "encrypt": [ | ||||||
|  |         ("abcdefghijklmnopqrstuvwxyz", b"Exercise 01", b"eygugnyl"), | ||||||
|  |         ("sectubs", | ||||||
|  |          b"Security exercises are fun", b"kienljlqizxldakiutlfxmr") | ||||||
|  |     ], | ||||||
|  |     "decrypt": [ | ||||||
|  |         ("sectubs", | ||||||
|  |          b"kienljlqizxldakiutlfxmr", b"securityexercisesarefun") | ||||||
|  |     ] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | BREAK_VIG = { | ||||||
|  |     (os.path.join(MY_DIR, 'vigenere/plaintext.txt'), | ||||||
|  |      os.path.join(MY_DIR, 'vigenere/ciphertext.txt')) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | BREAK_VIG_KEYLEN = 5 | ||||||
|  | 
 | ||||||
|  | TOOL_MAP = {"mono/mono.py": MONO, "mono/break_mono.py": BREAK_MONO, | ||||||
|  |             "vigenere/vig.py": VIG, "vigenere/break_vig.py": BREAK_VIG} | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | gryticdettpjcjgtmtntajgryticdkrqstmkojgjgtmtrmjgtatnrgdpmatmjgcdn | ||||||
|  | rpmhgoqmatpetopzsoqqtmfcajgtoaeatrmrpmjgtfozdatnmcpjqotjgtinltrsc | ||||||
|  | fgdwrpmontrntedjktmckgrjktkrpjrpmktjgopskgrjktlqtrntgryticdqoytmj | ||||||
|  | gttultaotphtgryticdkojptnntmjgtlqrzdtltclqtwrsopzereotnncwtjowtnx | ||||||
|  | dnjjctnhrltopjgonqrpmcfhcwltjojocpjgthcwlrnnocponzcptitjktozpcatj | ||||||
|  | gtpttmirpmktsttlldngopzcpktsttlldngopzcpjgononxdnjrldpsachsncpzka | ||||||
|  | ojjtpfcajgtltclqtkgchrpnttncwtjgopznkacpzqostrpjnoprhcqcpiktmccda | ||||||
|  | ngratedjjgtatnncwrpicjgtafdhsopopnthjncdjjgtatrpmjgononxdnjrldpsa | ||||||
|  | chsncpzqostkcastanoprfrhjcaiktmccdangratedjjgtatnncwrpicjgtafdhso | ||||||
|  | pacecjncdjjgtatgryticdyonojtmjgtbdrzwoatgryticdnkrwopjgtngojjgtlr | ||||||
|  | ajihcpytpjocpnrpmjgtatrqlcqojosjgtfrhtnrqkrinmofftatpjjgtagtjcaoh | ||||||
|  | jgtnrwtedjktnkrqqckojrpmktnttpcjgopzhgrpztpcjgopzgrnhgrpztmjtpwoq | ||||||
|  | qocpmcqqrancprqcnopzhrwlrozpjktpjiwoqqocpnjrayopzrpmkaojgopzoplro | ||||||
|  | peoznjacpzltclqtdpkoqqopzjczoytnwrqqopyonocprpmltanlthjoytcptopfo | ||||||
|  | ytsomnetqckjgtlcytajiqoptcptlcldqrjocpadppopcdjcfjowt | ||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								| @ -0,0 +1,35 @@ | |||||||
|  | have you been to the desert? | ||||||
|  | have you walked with the dead? | ||||||
|  | there's a hundred thousand children being killed for their bread | ||||||
|  | 
 | ||||||
|  | and the figures don't lie they speak of human disease | ||||||
|  | but we do what we want and we think what we please | ||||||
|  | 
 | ||||||
|  | have you lived the experience? | ||||||
|  | have you witnessed the plague? | ||||||
|  | people making babies sometimes just to escape | ||||||
|  | in this land of competition the compassion is gone | ||||||
|  | yet we ignore the needy and we keep pushing on | ||||||
|  | we keep pushing on | ||||||
|  | 
 | ||||||
|  | this is just a punk rock song | ||||||
|  | written for the people who can see something's wrong | ||||||
|  | like ants in a colony we do our share | ||||||
|  | but there's so many other fuckin' insects out there | ||||||
|  | and this is just a punk rock song | ||||||
|  | (like workers in a factory we do our share | ||||||
|  | but there's so many other fuckin' robots out there) | ||||||
|  | 
 | ||||||
|  | have you visited the quagmire? | ||||||
|  | have you swam in the shit? | ||||||
|  | the party conventions and the real politik | ||||||
|  | the faces always different, the rhetoric the same | ||||||
|  | but we swallow it, and we see nothing change | ||||||
|  | nothing has changed... | ||||||
|  | 
 | ||||||
|  | ten million dollars on a losing campaign | ||||||
|  | twenty million starving and writhing in pain | ||||||
|  | big strong people unwilling to give | ||||||
|  | small in vision and perspective | ||||||
|  | one in five kids below the poverty line | ||||||
|  | one population runnin' out of time | ||||||
| @ -0,0 +1,17 @@ | |||||||
|  | zvwxgybcyyzsgymlhvjcssflctqmgpuorhyyhgdqzsayfogwxrnsfjyrhvnlmywhi | ||||||
|  | hoqpughqmgzqfzkhzsxckhvjbxcksgtukfrivhmclozqglssqhaghycxfwgjkopts | ||||||
|  | zwhyfghgxyxqoxkrshnrhifsgsucslgaopcghcfqzkvjlohtfjrgouyxhwreubbfp | ||||||
|  | gwgjkeuzfqyopttkammcgfhyfkbgtkkcbjqnciyqzvoyqcvoyrnsmlcztcwyrzhmc | ||||||
|  | esowqutvnrgbrwsttcwyrzhmcvwgxzxcyjzgbrxmtjvbfkfsigjozqrnswwkubsde | ||||||
|  | urcsrcsoqjqbcbngfoxgzwqrsywqnljigypeognrjsgypumgnryszkukzzxfukhmc | ||||||
|  | svcbgzggznvcgjbzcpjkagwhuxwhycttftkjsjtrocbsmzoaggzwcsluhttploajx | ||||||
|  | kfcucudzjyxsscnrcwycjhvjpkofjluhfnaqgiumafgqckjslmtbokgmvhfegwbxr | ||||||
|  | zvsryygounkozbcxsutltoynjrhvjqkjsspkqcwbjsoqkgyswcicfiqzvoyfgjsrm | ||||||
|  | xshmytcbjeucrxmtuhmcjwbtqgifxuozzxjukzdbososborcgcrwsactccsccwzqa | ||||||
|  | xmwrhaghksiywsemzoigsucslgpsyfkfsymcohhfzvskyrzdwcnwgymxwqrsywqnl | ||||||
|  | jigypehvwcktsjrobzfzxsoyyxslygtqhnmtbsacxtsqrycutmjwtdmahvnlqobdm | ||||||
|  | tsktsrrtjcrpoijemczyxsgfbrmanqzoyjlzvsygssvfqicajdufsamrihnmttihi | ||||||
|  | iczqsywcsiozzyfktwaccvoycbsfmyvdsscjhcyfkvosbyvopccvoycbsfmyvdssc | ||||||
|  | jhcicgzgsmubsbmazrgpkoybfghvfnvsbjbzcwsrkufnrewhxqzwzqrnsfjgzozby | ||||||
|  | egkfqlcfujgmwsesignapigyzkqozqkoanjrwcspkogtlykvdyrzrnlugozpykwqj | ||||||
|  | jws | ||||||
| @ -0,0 +1,51 @@ | |||||||
|  | This is not a test of the Emergency Broadcast System. This is the real | ||||||
|  | thing | ||||||
|  | 
 | ||||||
|  | Kick back watch it crumble | ||||||
|  | See the drowning, watch the fall | ||||||
|  | I feel just terrible about it | ||||||
|  | That's sarcasm, let it burn | ||||||
|  | 
 | ||||||
|  | I'm gonna make a toast when it falls apart | ||||||
|  | I'm gonna raise my glass above my heart | ||||||
|  | Then someone shouts "That's what they get!" | ||||||
|  | 
 | ||||||
|  | For all the years of hit and run | ||||||
|  | For all the piss broke bands on VH1 | ||||||
|  | Where did all, their money go? | ||||||
|  | Don't we all know | ||||||
|  | 
 | ||||||
|  | Parasitic music industry | ||||||
|  | As it destroys itself | ||||||
|  | We'll show them how it's supposed to be | ||||||
|  | 
 | ||||||
|  | Music written from devotion | ||||||
|  | Not ambition, not for fame | ||||||
|  | Zero people are exploited | ||||||
|  | There are no tricks, up our sleeve | ||||||
|  | 
 | ||||||
|  | Gonna fight against the mass appeal | ||||||
|  | We're gonna kill the seven record deal | ||||||
|  | Make records that have more than one good song | ||||||
|  | The dinosaurs will slowly die | ||||||
|  | And I do believe no one will cry | ||||||
|  | I'm just fucking glad I'm gonna be | ||||||
|  | There to watch the fall | ||||||
|  | 
 | ||||||
|  | Prehistoric music industry | ||||||
|  | Three feet in la brea tar | ||||||
|  | Extinction never felt so good | ||||||
|  | 
 | ||||||
|  | If you think anyone would feel badly | ||||||
|  | You are sadly, mistaken | ||||||
|  | The time has come for evolution | ||||||
|  | Fuck collusion, kill the five | ||||||
|  | 
 | ||||||
|  | Whatever happened to the handshake? | ||||||
|  | Whatever happened to deals no-one would break? | ||||||
|  | What happened to integrity? | ||||||
|  | It's still there it always was | ||||||
|  | For playing music just because | ||||||
|  | A million reasons why | ||||||
|  | 
 | ||||||
|  | (All) dinosaurs will die | ||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								
					Loading…
					
					
				
		Reference in New Issue