Myfe (8 Part Series)
1 Myfe – 20/03/22
2 Myfe – 21/03/22
… 4 more parts…
3 Myfe – 23/03/22
4 Myfe – 24/03/22
5 Myfe – 30/03/22
6 Myfe – 02/04/22
7 Myfe – 03/04/22
8 Myfe – The End?
So for the last few days I just felt like quitting this project, because I just didn’t feel like continuing it.
But then I decided to continue doing this so here I am again.
So first, I decided to make a file called cryptography.py
and add a few encryption and decryption functions in there so I can use it in the quizzes for cryptography.
Then I thought of some encryption and decryption methods, and I got the following:
- Hex
- Base64
- Caeser Cipher
- sha256
- md5
- Binary
I realised that I could do Hex-ASCII, ASCII-Hex, Base64-ASCII, ASCII-Base64, Caeser Cipher-ASCII, ASCII-Caeser Cipher, ASCII-sha256, ASCII-md5, Binary-ASCII, and ASCII-Binary.
So I searched Google for the functions :
<span>import</span> <span>base64</span><span>import</span> <span>hashlib</span><span>import</span> <span>string</span><span>alphabet</span> <span>=</span> <span>string</span><span>.</span><span>ascii_lowercase</span><span>def</span> <span>hextoascii</span><span>(</span><span>text</span><span>):</span><span>return</span> <span>bytes</span><span>.</span><span>fromhex</span><span>(</span><span>text</span><span>).</span><span>decode</span><span>(</span><span>'</span><span>utf-8</span><span>'</span><span>)</span><span>def</span> <span>asciitohex</span><span>(</span><span>text</span><span>):</span><span>return</span> <span>text</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>utf-8</span><span>'</span><span>).</span><span>hex</span><span>()</span><span>def</span> <span>base64toascii</span><span>(</span><span>text</span><span>):</span><span>base64_bytes</span> <span>=</span> <span>text</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span><span>message_bytes</span> <span>=</span> <span>base64</span><span>.</span><span>b64decode</span><span>(</span><span>base64_bytes</span><span>)</span><span>message</span> <span>=</span> <span>message_bytes</span><span>.</span><span>decode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span><span>return</span> <span>message</span><span>def</span> <span>asciitobase64</span><span>(</span><span>text</span><span>):</span><span>message_bytes</span> <span>=</span> <span>text</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span><span>base64_bytes</span> <span>=</span> <span>base64</span><span>.</span><span>b64encode</span><span>(</span><span>message_bytes</span><span>)</span><span>base64_message</span> <span>=</span> <span>base64_bytes</span><span>.</span><span>decode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span><span>return</span> <span>base64_message</span><span>def</span> <span>asciitocaesercipher</span><span>(</span><span>text</span><span>,</span><span>s</span><span>):</span><span>result</span> <span>=</span> <span>""</span><span>for</span> <span>i</span> <span>in</span> <span>range</span><span>(</span><span>len</span><span>(</span><span>text</span><span>)):</span><span>char</span> <span>=</span> <span>text</span><span>[</span><span>i</span><span>]</span><span>if </span><span>(</span><span>char</span><span>.</span><span>isupper</span><span>()):</span><span>result</span> <span>+=</span> <span>chr</span><span>((</span><span>ord</span><span>(</span><span>char</span><span>)</span> <span>+</span> <span>s</span><span>-</span><span>65</span><span>)</span> <span>%</span> <span>26</span> <span>+</span> <span>65</span><span>)</span><span>else</span><span>:</span><span>result</span> <span>+=</span> <span>chr</span><span>((</span><span>ord</span><span>(</span><span>char</span><span>)</span> <span>+</span> <span>s</span> <span>-</span> <span>97</span><span>)</span> <span>%</span> <span>26</span> <span>+</span> <span>97</span><span>)</span><span>return</span> <span>result</span><span>def</span> <span>caeserciphertoascii</span><span>(</span><span>encrypted_message</span><span>,</span> <span>key</span><span>):</span><span>decrypted_message</span> <span>=</span> <span>""</span><span>for</span> <span>c</span> <span>in</span> <span>encrypted_message</span><span>:</span><span>if</span> <span>c</span> <span>in</span> <span>alphabet</span><span>:</span><span>position</span> <span>=</span> <span>alphabet</span><span>.</span><span>find</span><span>(</span><span>c</span><span>)</span><span>new_position</span> <span>=</span> <span>(</span><span>position</span> <span>-</span> <span>key</span><span>)</span> <span>%</span> <span>26</span><span>new_character</span> <span>=</span> <span>alphabet</span><span>[</span><span>new_position</span><span>]</span><span>decrypted_message</span> <span>+=</span> <span>new_character</span><span>else</span><span>:</span><span>decrypted_message</span> <span>+=</span> <span>c</span><span>return</span> <span>decrypted_message</span><span>def</span> <span>asciitosha256</span><span>(</span><span>hash_string</span><span>):</span><span>hashed_string</span> <span>=</span> <span>hashlib</span><span>.</span><span>sha256</span><span>(</span><span>hash_string</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>utf-8</span><span>'</span><span>)).</span><span>hexdigest</span><span>()</span><span>return</span> <span>hashed_string</span><span>def</span> <span>asciitomd5</span><span>(</span><span>text</span><span>):</span><span>result</span> <span>=</span> <span>hashlib</span><span>.</span><span>md5</span><span>(</span><span>text</span><span>.</span><span>encode</span><span>())</span><span>return</span> <span>result</span><span>def</span> <span>asciitobinary</span><span>(</span><span>text</span><span>):</span><span>thelist</span> <span>=</span> <span>[</span><span>bin</span><span>(</span><span>ord</span><span>(</span><span>x</span><span>))[</span><span>2</span><span>:].</span><span>zfill</span><span>(</span><span>8</span><span>)</span> <span>for</span> <span>x</span> <span>in</span> <span>text</span><span>]</span><span>binary</span> <span>=</span> <span>"</span><span> </span><span>"</span><span>.</span><span>join</span><span>(</span><span>thelist</span><span>)</span><span>return</span> <span>binary</span><span>def</span> <span>binarytoascii</span><span>(</span><span>binary</span><span>):</span><span>binary</span> <span>=</span> <span>binary</span><span>.</span><span>split</span><span>()</span><span>return</span> <span>''</span><span>.</span><span>join</span><span>([</span><span>chr</span><span>(</span><span>int</span><span>(</span><span>x</span><span>,</span> <span>2</span><span>))</span> <span>for</span> <span>x</span> <span>in</span> <span>binary</span><span>])</span><span>import</span> <span>base64</span> <span>import</span> <span>hashlib</span> <span>import</span> <span>string</span> <span>alphabet</span> <span>=</span> <span>string</span><span>.</span><span>ascii_lowercase</span> <span>def</span> <span>hextoascii</span><span>(</span><span>text</span><span>):</span> <span>return</span> <span>bytes</span><span>.</span><span>fromhex</span><span>(</span><span>text</span><span>).</span><span>decode</span><span>(</span><span>'</span><span>utf-8</span><span>'</span><span>)</span> <span>def</span> <span>asciitohex</span><span>(</span><span>text</span><span>):</span> <span>return</span> <span>text</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>utf-8</span><span>'</span><span>).</span><span>hex</span><span>()</span> <span>def</span> <span>base64toascii</span><span>(</span><span>text</span><span>):</span> <span>base64_bytes</span> <span>=</span> <span>text</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span> <span>message_bytes</span> <span>=</span> <span>base64</span><span>.</span><span>b64decode</span><span>(</span><span>base64_bytes</span><span>)</span> <span>message</span> <span>=</span> <span>message_bytes</span><span>.</span><span>decode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span> <span>return</span> <span>message</span> <span>def</span> <span>asciitobase64</span><span>(</span><span>text</span><span>):</span> <span>message_bytes</span> <span>=</span> <span>text</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span> <span>base64_bytes</span> <span>=</span> <span>base64</span><span>.</span><span>b64encode</span><span>(</span><span>message_bytes</span><span>)</span> <span>base64_message</span> <span>=</span> <span>base64_bytes</span><span>.</span><span>decode</span><span>(</span><span>'</span><span>ascii</span><span>'</span><span>)</span> <span>return</span> <span>base64_message</span> <span>def</span> <span>asciitocaesercipher</span><span>(</span><span>text</span><span>,</span><span>s</span><span>):</span> <span>result</span> <span>=</span> <span>""</span> <span>for</span> <span>i</span> <span>in</span> <span>range</span><span>(</span><span>len</span><span>(</span><span>text</span><span>)):</span> <span>char</span> <span>=</span> <span>text</span><span>[</span><span>i</span><span>]</span> <span>if </span><span>(</span><span>char</span><span>.</span><span>isupper</span><span>()):</span> <span>result</span> <span>+=</span> <span>chr</span><span>((</span><span>ord</span><span>(</span><span>char</span><span>)</span> <span>+</span> <span>s</span><span>-</span><span>65</span><span>)</span> <span>%</span> <span>26</span> <span>+</span> <span>65</span><span>)</span> <span>else</span><span>:</span> <span>result</span> <span>+=</span> <span>chr</span><span>((</span><span>ord</span><span>(</span><span>char</span><span>)</span> <span>+</span> <span>s</span> <span>-</span> <span>97</span><span>)</span> <span>%</span> <span>26</span> <span>+</span> <span>97</span><span>)</span> <span>return</span> <span>result</span> <span>def</span> <span>caeserciphertoascii</span><span>(</span><span>encrypted_message</span><span>,</span> <span>key</span><span>):</span> <span>decrypted_message</span> <span>=</span> <span>""</span> <span>for</span> <span>c</span> <span>in</span> <span>encrypted_message</span><span>:</span> <span>if</span> <span>c</span> <span>in</span> <span>alphabet</span><span>:</span> <span>position</span> <span>=</span> <span>alphabet</span><span>.</span><span>find</span><span>(</span><span>c</span><span>)</span> <span>new_position</span> <span>=</span> <span>(</span><span>position</span> <span>-</span> <span>key</span><span>)</span> <span>%</span> <span>26</span> <span>new_character</span> <span>=</span> <span>alphabet</span><span>[</span><span>new_position</span><span>]</span> <span>decrypted_message</span> <span>+=</span> <span>new_character</span> <span>else</span><span>:</span> <span>decrypted_message</span> <span>+=</span> <span>c</span> <span>return</span> <span>decrypted_message</span> <span>def</span> <span>asciitosha256</span><span>(</span><span>hash_string</span><span>):</span> <span>hashed_string</span> <span>=</span> <span>hashlib</span><span>.</span><span>sha256</span><span>(</span><span>hash_string</span><span>.</span><span>encode</span><span>(</span><span>'</span><span>utf-8</span><span>'</span><span>)).</span><span>hexdigest</span><span>()</span> <span>return</span> <span>hashed_string</span> <span>def</span> <span>asciitomd5</span><span>(</span><span>text</span><span>):</span> <span>result</span> <span>=</span> <span>hashlib</span><span>.</span><span>md5</span><span>(</span><span>text</span><span>.</span><span>encode</span><span>())</span> <span>return</span> <span>result</span> <span>def</span> <span>asciitobinary</span><span>(</span><span>text</span><span>):</span> <span>thelist</span> <span>=</span> <span>[</span><span>bin</span><span>(</span><span>ord</span><span>(</span><span>x</span><span>))[</span><span>2</span><span>:].</span><span>zfill</span><span>(</span><span>8</span><span>)</span> <span>for</span> <span>x</span> <span>in</span> <span>text</span><span>]</span> <span>binary</span> <span>=</span> <span>"</span><span> </span><span>"</span><span>.</span><span>join</span><span>(</span><span>thelist</span><span>)</span> <span>return</span> <span>binary</span> <span>def</span> <span>binarytoascii</span><span>(</span><span>binary</span><span>):</span> <span>binary</span> <span>=</span> <span>binary</span><span>.</span><span>split</span><span>()</span> <span>return</span> <span>''</span><span>.</span><span>join</span><span>([</span><span>chr</span><span>(</span><span>int</span><span>(</span><span>x</span><span>,</span> <span>2</span><span>))</span> <span>for</span> <span>x</span> <span>in</span> <span>binary</span><span>])</span>import base64 import hashlib import string alphabet = string.ascii_lowercase def hextoascii(text): return bytes.fromhex(text).decode('utf-8') def asciitohex(text): return text.encode('utf-8').hex() def base64toascii(text): base64_bytes = text.encode('ascii') message_bytes = base64.b64decode(base64_bytes) message = message_bytes.decode('ascii') return message def asciitobase64(text): message_bytes = text.encode('ascii') base64_bytes = base64.b64encode(message_bytes) base64_message = base64_bytes.decode('ascii') return base64_message def asciitocaesercipher(text,s): result = "" for i in range(len(text)): char = text[i] if (char.isupper()): result += chr((ord(char) + s-65) % 26 + 65) else: result += chr((ord(char) + s - 97) % 26 + 97) return result def caeserciphertoascii(encrypted_message, key): decrypted_message = "" for c in encrypted_message: if c in alphabet: position = alphabet.find(c) new_position = (position - key) % 26 new_character = alphabet[new_position] decrypted_message += new_character else: decrypted_message += c return decrypted_message def asciitosha256(hash_string): hashed_string = hashlib.sha256(hash_string.encode('utf-8')).hexdigest() return hashed_string def asciitomd5(text): result = hashlib.md5(text.encode()) return result def asciitobinary(text): thelist = [bin(ord(x))[2:].zfill(8) for x in text] binary = " ".join(thelist) return binary def binarytoascii(binary): binary = binary.split() return ''.join([chr(int(x, 2)) for x in binary])
Enter fullscreen mode Exit fullscreen mode
Next, I shifted to lists.py
and I added a dictionary called degreescosts
and added the cost of starting the degree, which is 30:
<span>degreescosts</span> <span>=</span> <span>{</span><span>'</span><span>cryptography</span><span>'</span><span>:</span> <span>30</span><span>}</span><span>degreescosts</span> <span>=</span> <span>{</span><span>'</span><span>cryptography</span><span>'</span><span>:</span> <span>30</span><span>}</span>degreescosts = {'cryptography': 30}
Enter fullscreen mode Exit fullscreen mode
After that, I went to functions.py
and made a function called addmoney
, because I thought I’d need it soon:
<span>def</span> <span>addmoney</span><span>(</span><span>username</span><span>,</span> <span>amount</span><span>):</span><span>user</span> <span>=</span> <span>getuser</span><span>(</span><span>username</span><span>)</span><span>money</span> <span>=</span> <span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]</span><span>money</span> <span>=</span> <span>money</span> <span>+</span> <span>amount</span><span>del</span> <span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]</span><span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]</span> <span>=</span> <span>money</span><span>profilescol</span><span>.</span><span>delete_one</span><span>({</span><span>"</span><span>Username</span><span>"</span><span>:</span> <span>username</span><span>})</span><span>profilescol</span><span>.</span><span>insert_many</span><span>([</span><span>user</span><span>])</span><span>return</span> <span>user</span><span>def</span> <span>addmoney</span><span>(</span><span>username</span><span>,</span> <span>amount</span><span>):</span> <span>user</span> <span>=</span> <span>getuser</span><span>(</span><span>username</span><span>)</span> <span>money</span> <span>=</span> <span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]</span> <span>money</span> <span>=</span> <span>money</span> <span>+</span> <span>amount</span> <span>del</span> <span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]</span> <span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]</span> <span>=</span> <span>money</span> <span>profilescol</span><span>.</span><span>delete_one</span><span>({</span><span>"</span><span>Username</span><span>"</span><span>:</span> <span>username</span><span>})</span> <span>profilescol</span><span>.</span><span>insert_many</span><span>([</span><span>user</span><span>])</span> <span>return</span> <span>user</span>def addmoney(username, amount): user = getuser(username) money = user['Money'] money = money + amount del user['Money'] user['Money'] = money profilescol.delete_one({"Username": username}) profilescol.insert_many([user]) return user
Enter fullscreen mode Exit fullscreen mode
Adding on to the code before, I created another function called adddegree
, in which you can start your degree getting process:
<span>def</span> <span>adddegree</span><span>(</span><span>username</span><span>,</span> <span>jobname</span><span>):</span><span>jobname</span> <span>=</span> <span>jobname</span><span>.</span><span>lower</span><span>()</span><span>if</span> <span>len</span><span>(</span><span>getpreparingdegrees</span><span>(</span><span>username</span><span>))</span> <span>==</span> <span>3</span><span>:</span><span>return</span> <span>"</span><span>You can</span><span>'</span><span>t prepare for more than 3 degrees.</span><span>"</span><span>if</span> <span>jobname</span> <span>not</span> <span>in</span> <span>degrees</span><span>:</span><span>return</span> <span>"</span><span>This is not a real degree!</span><span>"</span><span>user</span> <span>=</span> <span>getuser</span><span>(</span><span>username</span><span>)</span><span>if</span> <span>degreescosts</span><span>[</span><span>jobname</span><span>]</span> <span>></span> <span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]:</span><span>return</span> <span>f</span><span>"</span><span>You don</span><span>'</span><span>t have enough money to start preparing for </span><span>{</span><span>jobname</span><span>}</span><span>"</span><span>addmoney</span><span>(</span><span>username</span><span>,</span> <span>-</span><span>1</span><span>*</span><span>degreescosts</span><span>[</span><span>jobname</span><span>])</span><span>degree</span> <span>=</span> <span>[{</span><span>"</span><span>Username</span><span>"</span><span>:</span> <span>username</span><span>,</span><span>"</span><span>Type</span><span>"</span><span>:</span> <span>jobname</span><span>,</span><span>"</span><span>Status</span><span>"</span><span>:</span> <span>0</span><span>}]</span><span>degreescol</span><span>.</span><span>insert_many</span><span>(</span><span>degree</span><span>)</span><span>def</span> <span>adddegree</span><span>(</span><span>username</span><span>,</span> <span>jobname</span><span>):</span> <span>jobname</span> <span>=</span> <span>jobname</span><span>.</span><span>lower</span><span>()</span> <span>if</span> <span>len</span><span>(</span><span>getpreparingdegrees</span><span>(</span><span>username</span><span>))</span> <span>==</span> <span>3</span><span>:</span> <span>return</span> <span>"</span><span>You can</span><span>'</span><span>t prepare for more than 3 degrees.</span><span>"</span> <span>if</span> <span>jobname</span> <span>not</span> <span>in</span> <span>degrees</span><span>:</span> <span>return</span> <span>"</span><span>This is not a real degree!</span><span>"</span> <span>user</span> <span>=</span> <span>getuser</span><span>(</span><span>username</span><span>)</span> <span>if</span> <span>degreescosts</span><span>[</span><span>jobname</span><span>]</span> <span>></span> <span>user</span><span>[</span><span>'</span><span>Money</span><span>'</span><span>]:</span> <span>return</span> <span>f</span><span>"</span><span>You don</span><span>'</span><span>t have enough money to start preparing for </span><span>{</span><span>jobname</span><span>}</span><span>"</span> <span>addmoney</span><span>(</span><span>username</span><span>,</span> <span>-</span><span>1</span><span>*</span><span>degreescosts</span><span>[</span><span>jobname</span><span>])</span> <span>degree</span> <span>=</span> <span>[{</span> <span>"</span><span>Username</span><span>"</span><span>:</span> <span>username</span><span>,</span> <span>"</span><span>Type</span><span>"</span><span>:</span> <span>jobname</span><span>,</span> <span>"</span><span>Status</span><span>"</span><span>:</span> <span>0</span> <span>}]</span> <span>degreescol</span><span>.</span><span>insert_many</span><span>(</span><span>degree</span><span>)</span>def adddegree(username, jobname): jobname = jobname.lower() if len(getpreparingdegrees(username)) == 3: return "You can't prepare for more than 3 degrees." if jobname not in degrees: return "This is not a real degree!" user = getuser(username) if degreescosts[jobname] > user['Money']: return f"You don't have enough money to start preparing for {jobname}" addmoney(username, -1*degreescosts[jobname]) degree = [{ "Username": username, "Type": jobname, "Status": 0 }] degreescol.insert_many(degree)
Enter fullscreen mode Exit fullscreen mode
This is it for today, but in the next blog I’ll be the covering the frontend of starting the degree!
Make sure to follow me here and on GitHub, and star the repository
Thanks for reading!
Myfe (8 Part Series)
1 Myfe – 20/03/22
2 Myfe – 21/03/22
… 4 more parts…
3 Myfe – 23/03/22
4 Myfe – 24/03/22
5 Myfe – 30/03/22
6 Myfe – 02/04/22
7 Myfe – 03/04/22
8 Myfe – The End?
原文链接:Myfe – 02/04/22
暂无评论内容