Witam, zdecydowałem się napisać prosty programik do testowania, ponieważ kiedy ustawiałem krótkie klucze, obraz nie był zaszumiony. wraz z wrostem długości klucza obraz się koduje. Aplikacja jest pisana na kolanie i ze względu braku czsu na szybko. Brakuje wielu zabezpieczeń np przed usunięciem klucza. (sam klucz jest ladowany ze scieżki z programem)
UWAGA, nie używać na ważnych zdjęciach, bo można łatwo usunąć/ nadpisać klucz!
from PySide2.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QFileDialog, QMessageBox
import glob, os
from PIL import Image
import random
def create_msg(t="Mgs", m ="msg"):
msg = QMessageBox()
msg.setWindowTitle(t)
msg.setText(m)
msg.exec_()
class MyWin(QWidget):
def __init__(self):
super().__init__()
self.set_window()
self.connect()
self.files = []
def connect(self):
self.push_szukaj.clicked.connect(self.chose_folder)
self.push_generuj.clicked.connect(self.gen_key)
self.push_szyfruj.clicked.connect(self.proces)
def chose_folder(self):
path = QFileDialog.getExistingDirectory(self, "Select Directory")
if path:
self.line_folder.setText(path)
self.take_paths()
def take_paths(self):
if self.line_folder.text() == '':
create_msg("err", "Musisz wybrac sciezke")
else:
os.chdir(self.line_folder.text())
for file in glob.glob("*.png"):
self.files.append(self.line_folder.text() + '/' + file)
def gen_key(self):
if self.line_len.text() == '':
create_msg("err", "Musisz uzyc jakiejs wartosci")
else:
dlugosc = int(self.line_len.text())
key = ''.join([str(random.randint(0,1)) for x in range(dlugosc)])
file = open(r'./key.txt', 'w')
file.write(key)
create_msg("klucz stworzony", "udalo sie utworzyc klucz")
def proces(self):
file = open(r'./key.txt', 'r')
self.key = file.read()
def return_key(f, to, poz):
return int(self.key[f+poz:to+poz], 2)
for img in self.files:
obraz = Image.open(img)
mapa_pikseli = obraz.load()
SZER, WYS = obraz.size
poz = 0
for x in range(SZER):
for y in range(WYS):
r, g, b = obraz.getpixel((x, y))
key_r = return_key(0, 8, poz)
key_g = return_key(8, 16, poz)
key_b = return_key(16, 24, poz)
new_r, new_g, new_b = r ^ key_r, g ^ key_g, b ^ key_b
poz += 24
if poz > len(self.key)-50:
poz = 0
mapa_pikseli[x, y] = (new_r, new_g, new_b)
obraz.save(img)
create_msg("Succes", "Udalo sie!")
def set_window(self):
self.setFixedSize(600, 110)
self.label = QLabel(self)
self.label.setText("Wybierz: ")
self.label.setGeometry(30, 20, 51, 21)
self.line_folder = QLineEdit(self)
self.line_folder.setGeometry(90, 20, 371, 20)
self.push_szukaj = QPushButton(self)
self.push_szukaj.setText("Szukaj")
self.push_szukaj.setGeometry(490, 20, 75, 23)
self.push_generuj = QPushButton(self)
self.push_generuj.setText("Generuj")
self.push_generuj.setGeometry(160, 60, 121, 23)
self.line_len = QLineEdit(self)
self.line_len.setGeometry(40, 60, 81, 20)
self.push_szyfruj = QPushButton(self)
self.push_szyfruj.setText("Szyfruj")
self.push_szyfruj.setGeometry(330, 60, 111, 23)
app = QApplication()
window = MyWin()
window.show()
app.exec_()