Last active
February 13, 2021 23:54
-
-
Save pauliusbaulius/e671fc8bfcf445904f2ff4d52dcdbdd4 to your computer and use it in GitHub Desktop.
coolest symmetric encryption algorithm of 2021
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
description = """ | |
๐ฝ EMOJIPHER ๐ฝ | |
Your favorite encryption tool! | |
Are you bored of cryptographically safe means of encryption like AES256? | |
You hate asymmetric encryption? | |
You are a modern human that loves big hard drives and emojis? | |
You want to waste as much bandwith as you can? | |
You want to choke NSA and TENCENT servers with emoji? | |
If you answered any of those questions with YES, this script is for you. | |
Encrypt your data by turning each byte of source file into emoji! Yes, thats right. | |
Each byte becomes 4 bytes! And you get multiple emoji possibilities per byte! | |
Frequency analysis? More like waste of electricity. | |
Okay, I want this, but how do I start? | |
1. Generate your personal key by issuing. It will append .emojipher to the end of your given name. | |
$ ./emojipher.py -g my_key | |
2. Encrypt some data! | |
$ ./emojipher.py -e my_secrets.txt -k my_key.emojipher | |
3. ... Do whatever you want, store it, send it, share it ๐คก | |
4. Decrypt your precious data. | |
$ ./emojipher.py -d my_secrets.txt.encrypted -k my_key.emojipher | |
5. Enjoy your decrypted data, but make sure you are alone. | |
Made with ๐คก by the ๐คค in www.exception.lt | |
""" | |
changelog = """ | |
๐ฝ EMOJIPHER CHANGELOG ๐ฝ | |
10.10.2020 | |
+ made everything async, because why not. i have not checked if it made it faster/slower, but added because it is hype to do async. | |
+ fixed decryption making file disappear. | |
- removed emojipedia depedency by hardcoding emojis into the file. 5kb to 25kb file, but no pip installs needed. uses standardlib. if argparse is in standardlib. | |
+ decrypted message does not replace og message, it will be named <input_file>.decrypted, like you pass <message_file>.encrypted to the decryptor. | |
""" | |
from argparse import ArgumentParser, RawDescriptionHelpFormatter | |
# from emojipedia import ( | |
# Emojipedia, | |
# ) # replace with a massive list of hardcoded emojis lol. | |
import asyncio | |
import secrets | |
import os.path | |
import ast | |
async def get_all_emojis() -> set: | |
"""You like hardcoded emoji set? Here you go ;)""" | |
# return set([x.character for x in Emojipedia.all() if len(str(x.character)) == 1]) | |
return { | |
"๐", | |
"๐", | |
"๐ฅ", | |
"๐ฃ", | |
"๐ฎ", | |
"๐", | |
"\U0001faa2", | |
"๐", | |
"๐ฆฒ", | |
"๐ฅ", | |
"\U0001f9a4", | |
"๐", | |
"๐ป", | |
"๐", | |
"๐", | |
"๐ฆฏ", | |
"๐ฟ", | |
"๐ญ", | |
"๐", | |
"๐ฐ", | |
"๐", | |
"\U000e0034", | |
"๐พ", | |
"๐ฉ", | |
"\U000e0072", | |
"๐คฆ", | |
"๐จ", | |
"๐ง", | |
"๐ช", | |
"๐ช", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฅข", | |
"๐", | |
"\U000e005e", | |
"๐", | |
"๐คก", | |
"\U000e006a", | |
"๐ ", | |
"๐ณ", | |
"\U0001fa9a", | |
"\U000e005c", | |
"\U000e0049", | |
"๐ง", | |
"๐ฅ", | |
"๐พ", | |
"๐", | |
"\U000e004f", | |
"๐ก", | |
"๐", | |
"๐ ", | |
"โฌ", | |
"๐ฅ", | |
"๐น", | |
"๐", | |
"๐ฅ", | |
"\U0001fab1", | |
"๐", | |
"๐ ", | |
"๐ฏ", | |
"๐คฒ", | |
"๐ง ", | |
"๐ฒ", | |
"๐ค", | |
"๐บ", | |
"๐", | |
"๐ผ", | |
"๐", | |
"๐", | |
"โ", | |
"๐ฆ", | |
"๐ฐ", | |
"๐ฅ", | |
"๐น", | |
"\U000e002a", | |
"๐ฆ", | |
"๐ฑ", | |
"๐ค", | |
"๐ฆ", | |
"๐", | |
"๐ฅ", | |
"๐", | |
"๐", | |
"๐", | |
"๐งค", | |
"๐", | |
"๐", | |
"๐", | |
"๐ ", | |
"๐ง", | |
"๐ฅค", | |
"๐ถ", | |
"๐ฑ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ณ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฅพ", | |
"โฝ", | |
"๐ง", | |
"๐", | |
"\U0001fab0", | |
"๐จ", | |
"\U0001f977", | |
"๐ฅ", | |
"๐", | |
"โ", | |
"๐", | |
"๐ฃ", | |
"๐ ", | |
"๐", | |
"๐", | |
"๐", | |
"\U000e0023", | |
"๐", | |
"๐คบ", | |
"๐ด", | |
"๐ต", | |
"๐ง", | |
"๐ฆ", | |
"๐ผ", | |
"๐", | |
"๐", | |
"๐ญ", | |
"๐ง", | |
"๐ค", | |
"๐", | |
"โ", | |
"๐ป", | |
"\U000e003b", | |
"๐น", | |
"๐", | |
"\U000e0042", | |
"๐", | |
"\U000e0066", | |
"๐ง", | |
"\U000e0053", | |
"๐ต", | |
"๐", | |
"๐", | |
"๐ง", | |
"๐", | |
"๐ฝ", | |
"๐ข", | |
"๐", | |
"๐น", | |
"๐", | |
"๐ค", | |
"๐ท", | |
"\U000e0031", | |
"๐ค", | |
"๐ฆ", | |
"๐ฉ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ด", | |
"๐คฃ", | |
"\U000e002e", | |
"๐", | |
"\U0001f9ac", | |
"๐ต", | |
"๐", | |
"\U000e004a", | |
"\U000e0030", | |
"๐ฌ", | |
"๐", | |
"๐ ", | |
"๐", | |
"๐ฉธ", | |
"\U000e002c", | |
"๐", | |
"โ", | |
"\U000e0033", | |
"\U000e0071", | |
"๐ถ", | |
"๐", | |
"๐งซ", | |
"๐", | |
"๐", | |
"โ", | |
"๐", | |
"โ", | |
"โ", | |
"๐", | |
"๐ซ", | |
"๐ ", | |
"๐", | |
"๐ค", | |
"๐ท", | |
"๐ฉ", | |
"๐ฆง", | |
"๐", | |
"๐ฆ", | |
"๐ด", | |
"๐", | |
"๐ด", | |
"โ", | |
"๐ฆบ", | |
"\u200d", | |
"๐พ", | |
"๐ฆด", | |
"๐", | |
"๐", | |
"๐ก", | |
"\U000e0036", | |
"๐ฅ", | |
"๐", | |
"๐", | |
"๐ท", | |
"๐งพ", | |
"๐", | |
"๐ช", | |
"๐", | |
"\U0001fa74", | |
"๐ค", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฑ", | |
"\U000e0076", | |
"\U000e0070", | |
"๐พ", | |
"๐ธ", | |
"๐ง", | |
"๐ฆจ", | |
"๐จ", | |
"๐ธ", | |
"๐", | |
"๐ก", | |
"\U0001faa1", | |
"โพ", | |
"\U0001fa98", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"\U000e0077", | |
"๐ต", | |
"\U000e005f", | |
"\U000e003f", | |
"๐งธ", | |
"๐ด", | |
"๐ป", | |
"๐ฏ", | |
"๐ณ", | |
"\U000e004c", | |
"๐", | |
"๐ญ", | |
"๐ง", | |
"\U000e0057", | |
"๐ค", | |
"๐ฆ", | |
"๐ฅ", | |
"๐", | |
"๐", | |
"๐คฟ", | |
"๐ง", | |
"๐ค", | |
"๐", | |
"๐", | |
"๐ง", | |
"๐ญ", | |
"๐", | |
"๐", | |
"๐ค", | |
"๐ฟ", | |
"๐ฒ", | |
"๐ข", | |
"๐ช", | |
"๐", | |
"๐", | |
"๐ฆท", | |
"๐ฅ", | |
"\U000e0064", | |
"๐ ", | |
"๐ฐ", | |
"๐", | |
"๐ฎ", | |
"๐ธ", | |
"๐", | |
"๐", | |
"\U000e0021", | |
"๐งฎ", | |
"๐", | |
"๐ฆ", | |
"\U0001fad6", | |
"๐", | |
"๐ง", | |
"๐ฟ", | |
"๐", | |
"๐ฏ", | |
"โบ", | |
"๐ฅ", | |
"๐", | |
"๐", | |
"๐ค", | |
"๐ฃ", | |
"๐", | |
"๐ฏ", | |
"๐ป", | |
"\U000e0027", | |
"\U000e0056", | |
"๐ฆ", | |
"๐ฆ", | |
"๐ง", | |
"๐ ", | |
"๐", | |
"๐ฏ", | |
"๐ฅ", | |
"๐ง", | |
"๐", | |
"๐ฑ", | |
"๐ฆข", | |
"๐", | |
"๐", | |
"๐น", | |
"๐", | |
"๐", | |
"๐ป", | |
"๐", | |
"๐ฆฉ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ผ", | |
"๐", | |
"๐ฅ ", | |
"๐ค", | |
"โฃ", | |
"๐", | |
"๐ณ", | |
"\U000e0059", | |
"๐ป", | |
"๐ค", | |
"๐ฐ", | |
"๐", | |
"๐ธ", | |
"๐ฃ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ช", | |
"๐ช", | |
"๐", | |
"โ", | |
"\U0001fa97", | |
"๐ฆถ", | |
"\U0001f6d6", | |
"๐ฆฝ", | |
"๐ฒ", | |
"\U000e0060", | |
"๐", | |
"๐งฆ", | |
"๐ ", | |
"๐ฆ", | |
"\U000e0035", | |
"๐", | |
"\U0001fab3", | |
"๐งฒ", | |
"๐ฐ", | |
"๐ฌ", | |
"๐", | |
"๐ง", | |
"๐", | |
"๐งด", | |
"๐ต", | |
"๐ฑ", | |
"๐ธ", | |
"๐", | |
"๐ถ", | |
"๐ช", | |
"\U000e0068", | |
"๐ฉ", | |
"๐พ", | |
"๐", | |
"๐ณ", | |
"๐", | |
"โ", | |
"๐ท", | |
"๐", | |
"๐ฅผ", | |
"๐", | |
"๐", | |
"๐", | |
"\U000e0074", | |
"๐ถ", | |
"๐ฃ", | |
"๐ก", | |
"\U0001fad5", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"โฒ", | |
"๐", | |
"๐ง", | |
"\U0001faa5", | |
"๐", | |
"๐", | |
"๐", | |
"๐ช", | |
"๐ฅบ", | |
"๐งก", | |
"๐ก", | |
"๐ฎ", | |
"๐น", | |
"โช", | |
"๐ฆ", | |
"๐คข", | |
"๐ฅจ", | |
"๐ป", | |
"๐ณ", | |
"๐", | |
"๐ง", | |
"๐ฅ", | |
"๐", | |
"๐ฅฑ", | |
"๐ข", | |
"๐ฆช", | |
"๐", | |
"๐ฎ", | |
"๐ซ", | |
"๐ค", | |
"๐ธ", | |
"๐ฏ", | |
"\U0001fac2", | |
"\U000e004d", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฌ", | |
"๐", | |
"๐ฆ", | |
"๐", | |
"๐ค", | |
"๐น", | |
"๐ฝ", | |
"๐", | |
"๐ฅ", | |
"๐", | |
"\U000e0048", | |
"๐", | |
"๐บ", | |
"๐", | |
"๐", | |
"\U0001fa9d", | |
"\U0001f9ad", | |
"๐", | |
"\U000e0046", | |
"๐ฌ", | |
"๐บ", | |
"๐ฆ", | |
"๐ท", | |
"\U000e0028", | |
"๐ฃ", | |
"๐ฆ", | |
"๐", | |
"๐ฆ", | |
"๐พ", | |
"๐ฅ", | |
"๐ฟ", | |
"๐", | |
"๐ฅฟ", | |
"๐", | |
"๐", | |
"๐ฉฒ", | |
"๐ฅฐ", | |
"\U0001fac1", | |
"๐", | |
"๐", | |
"๐ฅ", | |
"๐ถ", | |
"๐ฌ", | |
"๐", | |
"๐", | |
"๐น", | |
"๐", | |
"๐", | |
"๐คต", | |
"๐ฅ", | |
"\U000e004b", | |
"๐คน", | |
"โ", | |
"๐", | |
"๐ฐ", | |
"๐บ", | |
"๐", | |
"๐ป", | |
"๐", | |
"๐ฅฃ", | |
"๐", | |
"๐ ", | |
"\U0001fa85", | |
"โ", | |
"๐", | |
"๐ฆฟ", | |
"๐", | |
"๐ก", | |
"๐งฉ", | |
"๐ด", | |
"๐ฅต", | |
"๐ค", | |
"๐ฉบ", | |
"๐", | |
"๐คง", | |
"\U000e0029", | |
"๐ธ", | |
"๐", | |
"๐", | |
"๐ซ", | |
"\U000e007e", | |
"๐", | |
"๐ฝ", | |
"๐ ", | |
"๐", | |
"๐คฌ", | |
"โฟ", | |
"๐ฉ", | |
"๐", | |
"\U000e002f", | |
"\U0001fa96", | |
"๐ง", | |
"๐จ", | |
"๐", | |
"๐ง", | |
"๐ข", | |
"\U0001f6fb", | |
"๐บ", | |
"๐", | |
"๐ค", | |
"๐", | |
"๐", | |
"๐", | |
"๐ข", | |
"\U000e0069", | |
"๐", | |
"โจ", | |
"๐ผ", | |
"\U000e007b", | |
"๐ซ", | |
"๐", | |
"\U000e0045", | |
"\U0001fa9f", | |
"๐", | |
"โณ", | |
"๐ญ", | |
"๐", | |
"๐ง", | |
"๐ค", | |
"๐ง", | |
"๐", | |
"โก", | |
"๐งบ", | |
"๐", | |
"๐ฅฆ", | |
"๐ฆฆ", | |
"๐บ", | |
"๐ฅป", | |
"\U000e0063", | |
"\U0001f9a3", | |
"๐", | |
"\U0001fac0", | |
"๐ฅ", | |
"๐", | |
"๐ฉ", | |
"๐", | |
"๐ง", | |
"๐ง", | |
"\U000e007c", | |
"๐", | |
"๐ฐ", | |
"๐", | |
"๐ฌ", | |
"๐ช", | |
"\U0001faa4", | |
"โ", | |
"๐ฅ", | |
"๐", | |
"๐ฝ", | |
"๐พ", | |
"โ", | |
"๐", | |
"๐ฝ", | |
"๐ช", | |
"\U0001fad2", | |
"๐ฅง", | |
"๐ฅณ", | |
"๐ฅ", | |
"๐ฆ", | |
"๐ผ", | |
"๐", | |
"\U0001fa9e", | |
"๐", | |
"๐ฅ", | |
"๐ต", | |
"๐", | |
"๐ฆณ", | |
"๐", | |
"๐", | |
"๐ง", | |
"๐ต", | |
"๐ฆ", | |
"\U000e0051", | |
"๐ป", | |
"๐ง", | |
"๐", | |
"โ ", | |
"๐ค", | |
"๐ช", | |
"๐ฅ ", | |
"\U000e0020", | |
"\U000e0062", | |
"๐", | |
"\U000e0079", | |
"๐ฌ", | |
"\U0001f9ab", | |
"\U000e006e", | |
"๐ฅ", | |
"๐จ", | |
"๐ฎ", | |
"๐ค", | |
"๐ญ", | |
"๐ด", | |
"๐", | |
"๐ผ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ก", | |
"๐", | |
"๐ ", | |
"๐ซ", | |
"๐", | |
"๐", | |
"๐ซ", | |
"๐ฟ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฆ", | |
"\U000e0061", | |
"๐ค", | |
"๐", | |
"โช", | |
"๐ฆ", | |
"โฉ", | |
"๐", | |
"๐ฒ", | |
"๐", | |
"๐", | |
"๐งฑ", | |
"๐", | |
"\U000e0038", | |
"๐ค", | |
"๐ค", | |
"๐คธ", | |
"๐", | |
"๐ฅ", | |
"๐ณ", | |
"๐ฅ", | |
"๐", | |
"๐ฉ", | |
"๐คท", | |
"โฝ", | |
"๐ฆ", | |
"๐", | |
"๐ข", | |
"๐ซ", | |
"๐", | |
"๐ค", | |
"๐", | |
"โช", | |
"\U000e0067", | |
"๐ผ", | |
"๐ฐ", | |
"๐ฅฝ", | |
"๐ผ", | |
"๐ฒ", | |
"๐ณ", | |
"๐ถ", | |
"๐ฅซ", | |
"๐งง", | |
"๐", | |
"๐น", | |
"๐", | |
"๐ฆ", | |
"๐ช", | |
"๐ต", | |
"๐ฟ", | |
"๐ก", | |
"๐", | |
"๐ฏ", | |
"๐ด", | |
"โซ", | |
"๐งฌ", | |
"๐ฟ", | |
"๐ถ", | |
"๐ช", | |
"โฐ", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฑ", | |
"๐งฐ", | |
"๐ธ", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐งข", | |
"๐", | |
"๐ง", | |
"๐ง", | |
"๐ฉณ", | |
"๐ข", | |
"\U000e0032", | |
"\U000e005b", | |
"๐น", | |
"๐ฅ", | |
"๐ฑ", | |
"๐", | |
"๐", | |
"๐ฆ", | |
"๐", | |
"\U000e0041", | |
"โ", | |
"๐น", | |
"๐", | |
"๐", | |
"๐ผ", | |
"โ", | |
"๐งฏ", | |
"๐บ", | |
"๐", | |
"๐ข", | |
"๐ ", | |
"โ ", | |
"๐ค", | |
"๐ฒ", | |
"๐ฌ", | |
"โ", | |
"๐", | |
"๐ฆ", | |
"๐ท", | |
"\U0001fab4", | |
"๐ฅ", | |
"๐ฆฐ", | |
"๐ฎ", | |
"โ", | |
"๐", | |
"\U000e003d", | |
"๐", | |
"๐ ", | |
"๐ฑ", | |
"๐จ", | |
"๐ฆ", | |
"๐", | |
"๐ญ", | |
"๐", | |
"\U0001f6d7", | |
"๐", | |
"๐ถ", | |
"๐จ", | |
"โ", | |
"๐ฅ", | |
"\U000e005a", | |
"๐ฆ", | |
"โ", | |
"๐", | |
"\U000e0058", | |
"๐งถ", | |
"๐ฅ", | |
"๐", | |
"๐ผ", | |
"๐ ", | |
"\U000e005d", | |
"๐ค", | |
"๐จ", | |
"๐คพ", | |
"๐", | |
"๐คด", | |
"๐ ", | |
"๐ช", | |
"๐งฃ", | |
"๐", | |
"๐ด", | |
"๐", | |
"\U000e003e", | |
"๐ฆ", | |
"\U000e0078", | |
"๐ถ", | |
"๐ท", | |
"๐ฝ", | |
"๐ฆ", | |
"\U0001fad0", | |
"๐ช", | |
"๐ฅ", | |
"\U0001fa84", | |
"๐ผ", | |
"๐", | |
"๐", | |
"โ", | |
"\U000e004e", | |
"โซ", | |
"๐", | |
"๐", | |
"๐", | |
"๐พ", | |
"๐คฉ", | |
"๐", | |
"\U0001f9cb", | |
"๐", | |
"๐คฐ", | |
"๐", | |
"๐", | |
"๐พ", | |
"๐คญ", | |
"๐ฆ ", | |
"๐ฆ", | |
"๐", | |
"๐ญ", | |
"๐", | |
"๐ฑ", | |
"๐", | |
"๐", | |
"๐น", | |
"๐งจ", | |
"๐", | |
"๐ฉฑ", | |
"๐ฆ", | |
"๐ง", | |
"๐", | |
"๐", | |
"๐", | |
"โ", | |
"\U000e0044", | |
"๐ฅด", | |
"๐ฃ", | |
"\U000e0039", | |
"โ", | |
"๐งณ", | |
"๐ง", | |
"๐ฅญ", | |
"๐ฆ", | |
"๐ข", | |
"๐คฏ", | |
"๐ ", | |
"โ", | |
"๐ธ", | |
"\U0001faa3", | |
"๐ฎ", | |
"๐ถ", | |
"๐ญ", | |
"๐ณ", | |
"๐จ", | |
"โ", | |
"๐ง", | |
"๐บ", | |
"๐", | |
"๐", | |
"๐ฝ", | |
"๐บ", | |
"๐ง", | |
"๐คจ", | |
"\U000e003c", | |
"๐ฉน", | |
"๐คณ", | |
"๐ป", | |
"๐ฌ", | |
"๐", | |
"๐ฏ", | |
"๐", | |
"๐ฐ", | |
"๐ธ", | |
"๐ฅ", | |
"๐ฟ", | |
"๐", | |
"๐ฐ", | |
"๐", | |
"๐", | |
"๐ฅ", | |
"๐ฌ", | |
"๐คผ", | |
"๐งป", | |
"๐ฅฉ", | |
"๐ธ", | |
"๐จ", | |
"๐ฅ", | |
"๐งน", | |
"๐", | |
"๐ฎ", | |
"๐", | |
"๐ฑ", | |
"๐", | |
"๐", | |
"๐ฌ", | |
"๐คถ", | |
"๐ท", | |
"๐ฅช", | |
"๐ถ", | |
"๐", | |
"๐ด", | |
"๐งญ", | |
"๐ญ", | |
"๐ณ", | |
"๐", | |
"๐ช", | |
"๐ฆ", | |
"๐", | |
"โฐ", | |
"\U0001f90c", | |
"๐", | |
"๐ฎ", | |
"๐ฆ", | |
"๐ฑ", | |
"๐ค", | |
"๐", | |
"๐ธ", | |
"๐ฆ", | |
"\U000e002d", | |
"๐ฅ", | |
"๐ต", | |
"\U0001faa0", | |
"๐", | |
"\U000e006d", | |
"๐ต", | |
"๐", | |
"๐ฆ", | |
"๐ค", | |
"๐", | |
"๐งท", | |
"\U000e006c", | |
"๐", | |
"๐ญ", | |
"๐ซ", | |
"โณ", | |
"๐", | |
"๐ท", | |
"\U000e0022", | |
"\U000e0024", | |
"๐", | |
"โพ", | |
"๐", | |
"\U0001fab5", | |
"๐", | |
"๐", | |
"๐ฎ", | |
"๐", | |
"โญ", | |
"๐ท", | |
"๐", | |
"๐", | |
"๐", | |
"\U000e007d", | |
"๐", | |
"๐", | |
"๐ช", | |
"๐", | |
"๐", | |
"\U000e0075", | |
"๐ ", | |
"๐ฟ", | |
"๐", | |
"๐ฅ", | |
"๐ต", | |
"๐จ", | |
"๐ต", | |
"๐ด", | |
"๐ฆ", | |
"\U000e0073", | |
"๐ป", | |
"๐ ", | |
"โฝ", | |
"โ", | |
"๐ฒ", | |
"\U000e0065", | |
"๐", | |
"๐น", | |
"๐ ", | |
"๐ฅถ", | |
"๐", | |
"๐", | |
"๐คช", | |
"๐ค ", | |
"๐ฎ", | |
"๐", | |
"๐ค", | |
"\U000e007f", | |
"๐", | |
"๐คฅ", | |
"๐ ", | |
"โญ", | |
"๐ค", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฐ", | |
"๐ง", | |
"๐ถ", | |
"๐ฐ", | |
"๐คค", | |
"๐งฅ", | |
"๐", | |
"\U000e0037", | |
"๐ฆฅ", | |
"๐บ", | |
"๐ฝ", | |
"โฌ", | |
"๐ฅ", | |
"โ", | |
"๐ฆก", | |
"๐", | |
"๐ฆพ", | |
"๐ค", | |
"๐ฏ", | |
"๐", | |
"๐", | |
"๐ง", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐ค", | |
"\U0001f6fc", | |
"๐ฅ", | |
"๐", | |
"\U000e0040", | |
"\U000e006f", | |
"๐", | |
"๐ฉ", | |
"๐ก", | |
"๐ช", | |
"๐ง", | |
"๐ฉ", | |
"๐ฟ", | |
"๐ฆ", | |
"๐", | |
"\U0001f972", | |
"๐ฅ", | |
"๐", | |
"๐งช", | |
"\U000e0043", | |
"๐ป", | |
"๐ช", | |
"๐ฌ", | |
"\U000e0052", | |
"๐ธ", | |
"๐คฝ", | |
"\U0001fa86", | |
"๐ง", | |
"\U000e0025", | |
"๐", | |
"๐", | |
"๐", | |
"๐ฒ", | |
"๐ฃ", | |
"๐", | |
"\U0001faa7", | |
"\U000e003a", | |
"\U0001fad4", | |
"โ", | |
"๐ ", | |
"๐ญ", | |
"๐", | |
"โ", | |
"๐", | |
"๐ฏ", | |
"๐ฉ", | |
"๐ธ", | |
"๐ฏ", | |
"๐ฆ", | |
"๐ฆ", | |
"๐ฆฑ", | |
"๐ช", | |
"๐ฏ", | |
"๐ฉ", | |
"๐ซ", | |
"๐ฟ", | |
"\U000e002b", | |
"\U0001fa9c", | |
"\U0001faa8", | |
"๐ฒ", | |
"๐บ", | |
"๐ฆ", | |
"๐น", | |
"๐ฆต", | |
"๐ฝ", | |
"๐", | |
"๐ด", | |
"๐ฃ", | |
"๐ง", | |
"๐", | |
"๐", | |
"๐", | |
"๐ซ", | |
"๐งฝ", | |
"๐", | |
"๐ฆธ", | |
"๐ฝ", | |
"๐พ", | |
"๐ง", | |
"\U000e0026", | |
"\U000e006b", | |
"๐คฎ", | |
"๐", | |
"๐", | |
"๐ผ", | |
"๐", | |
"๐ฉ", | |
"๐ฅ", | |
"๐", | |
"๐ฉฐ", | |
"๐", | |
"๐บ", | |
"๐", | |
"๐ต", | |
"๐ฏ", | |
"โฟ", | |
"๐", | |
"๐ฃ", | |
"๐ฆผ", | |
"๐ง ", | |
"๐", | |
"๐ฅฎ", | |
"๐ ", | |
"๐", | |
"\U000e0054", | |
"๐ฆน", | |
"๐ฅ", | |
"๐ท", | |
"๐", | |
"๐ข", | |
"๐บ", | |
"๐ท", | |
"๐ด", | |
"๐ฒ", | |
"๐ฆป", | |
"๐พ", | |
"๐", | |
"โ", | |
"๐", | |
"๐ผ", | |
"๐ฆ", | |
"\U0001fad3", | |
"\U0001fad1", | |
"๐", | |
"\U0001fa99", | |
"๐ข", | |
"๐", | |
"๐", | |
"๐ฅฅ", | |
"โต", | |
"\U0001fa9b", | |
"๐", | |
"๐", | |
"๐", | |
"๐", | |
"๐ณ", | |
"๐ฅฏ", | |
"๐ฅก", | |
"๐", | |
"๐", | |
"๐", | |
"๐ช", | |
"๐ง", | |
"\U000e007a", | |
"๐", | |
"๐ฃ", | |
"๐ซ", | |
"๐จ", | |
"๐งฟ", | |
"\U0001fa83", | |
"๐", | |
"\U0001fab6", | |
"๐ฒ", | |
"๐ง", | |
"๐", | |
"๐", | |
"๐", | |
"๐ก", | |
"๐", | |
"๐ก", | |
"๏ธ", | |
"๐", | |
"๐งผ", | |
"๐ง", | |
"\U0001f978", | |
"๐ง", | |
"๐", | |
"๐", | |
"๐ซ", | |
"๐", | |
"๐ฒ", | |
"๐", | |
"๐ป", | |
"๐", | |
"๐ซ", | |
"๐ฅ", | |
"\U0001fab2", | |
"๐", | |
"\U000e0055", | |
"\U0001faa6", | |
"๐ฃ", | |
"๐บ", | |
"๐ฆ ", | |
"๐ ", | |
"๐ด", | |
"๐", | |
"๐ก", | |
"๐ข", | |
"๐", | |
"โ", | |
"๐ณ", | |
"๐ฎ", | |
"๐", | |
"๐คซ", | |
"๐ฆ", | |
"๐", | |
"๐", | |
"๐งต", | |
"๐ฅฌ", | |
"๐", | |
"๐ฅ", | |
"๐", | |
"๐ฝ", | |
"โฌ", | |
"๐บ", | |
"๐ฆฎ", | |
"๐ฆ", | |
"\U000e0047", | |
"๐ ", | |
"\U000e0050", | |
"๐ฆ", | |
"๐คฑ", | |
} | |
async def get_random_emoji_list(emoji_list: set) -> list: | |
"""Generates and returns a list of random emojis from a list of all available emojis. | |
Uses secure random generator https://docs.python.org/3.6/library/secrets.html | |
""" | |
return [emoji_list.pop() for x in range(secrets.randbelow(4) + 3)] | |
async def generate_key(filename): | |
"""Generates a key in form of a dictionary byte:emoji_list. | |
Stores key as key.emojipher. Overwrites existing key if exists! | |
1. Generate a list of all emojis. | |
2. Generate a dictionary of bytes 0 - 256 and their list of emoji. | |
3. Store key as key.emojipher. | |
""" | |
print("๐๐ Generating key, I am not looking...") | |
emojis = await get_all_emojis() | |
key = {x: await get_random_emoji_list(emojis) for x in range(0, 256)} | |
with open(filename + ".emojipher", "w") as f: | |
# Write as string, can evaluate string to dict when reading key. | |
f.write(str(key)) | |
print("๐งโ๐ป๐ค Key has been generated! Keep it safe.") | |
async def encrypt_data(filename: str, key: str): | |
"""Encrypts given file with given key. If such file exists, it is deleted! | |
1. Load key. | |
2. Iterate file bytes. | |
2.1. Convert byte to int and find matching key in dict. | |
2.2. Pick one random emoji from according list, | |
2.3. Append to file. | |
""" | |
print("๐ง๐ผ๐ฅ Encrypting your data...") | |
with open(key, "r") as fr: | |
key = ast.literal_eval(fr.read()) | |
output_filename = filename + ".encrypted" | |
# Remove existing file if needed. | |
if os.path.exists(output_filename): | |
os.remove(output_filename) | |
with open(filename, "rb") as fr: | |
byte = fr.read(1) | |
while byte != b"": | |
# Convert byte to int to match in key dictionary. | |
b = int.from_bytes(byte, "little") | |
byte = fr.read(1) | |
with open(output_filename, "a") as fw: | |
# Find matching random emoji and write to file. | |
fw.write(secrets.choice(key[b])) | |
print( | |
"๐ต ๐ต๏ธโโ๏ธ Your data has been encrypted and is safe from bioluminescent agents." | |
) | |
async def decrypt_data(filename: str, key: str): | |
"""Given a filename and a key, decrypts data into original file.""" | |
print("๐๐ฝ Decrypting data, make sure you are alone!") | |
with open(key, "r") as fr: | |
key = ast.literal_eval(fr.read()) | |
# Invert key, aka make each emoji in list of each key into a new key. | |
# So one key with list of 5 emojis becomes 5 keys with same value of byte. | |
inverted_key = {} | |
for k, v in key.items(): | |
for e in v: | |
inverted_key[e] = k.to_bytes(1, "little") | |
output_filename = filename.replace(".encrypted", ".decrypted") | |
if os.path.exists(output_filename): | |
os.remove(output_filename) | |
with open(filename, "r", encoding="utf-8") as fr: | |
while True: | |
c = fr.read(1) | |
if not c: | |
break | |
with open(output_filename, "ab") as fw: | |
fw.write(inverted_key[c]) | |
print("๐จ๐ปโ๐ป๐จ Your data has been decrypted. Have fun!") | |
if __name__ == "__main__": | |
parser = ArgumentParser( | |
description=description, formatter_class=RawDescriptionHelpFormatter | |
) | |
generate = parser.add_argument_group("key generation") | |
generate.add_argument("-g", "--generate", type=str, help="key name") | |
group = parser.add_mutually_exclusive_group() | |
group.add_argument("-e", "--encrypt", type=str, help="file(s) to encrypt") | |
group.add_argument("-d", "--decrypt", type=str, help="file(s) to decrypt") | |
group.add_argument("-c", "--changelog", action="store_true", help="see whats new!") | |
parser.add_argument("-k", "--key", type=str, help="path to key") | |
args = parser.parse_args() | |
if args.generate: | |
# await generate_key(args.generate) | |
loop = asyncio.get_event_loop() | |
loop.run_until_complete(generate_key(args.generate)) | |
loop.close() | |
elif args.encrypt: | |
# await encrypt_data(args.encrypt, args.key) | |
loop = asyncio.get_event_loop() | |
loop.run_until_complete(encrypt_data(args.encrypt, args.key)) | |
loop.close() | |
elif args.decrypt: | |
# await decrypt_data(args.decrypt, args.key) | |
loop = asyncio.get_event_loop() | |
loop.run_until_complete(decrypt_data(args.decrypt, args.key)) | |
loop.close() | |
elif args.changelog: | |
print(changelog) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment