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