Myfe – 02/04/22

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

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
It is during our darkest moments that we must focus to see the light.
越是在艰难困苦的时候,我们越是要看到希望
评论 抢沙发

请登录后发表评论

    暂无评论内容