Page 37 - bilim_dergisi
P. 37
Makinacı ve Zabzun Denizli İl Millî Eğitim Müdürlüğü Bilim ve Eğitim Dergisi 1(1), 2025 * Mert Ata MAKİNACI
message = input('Mesaj giriniz: ') #şifrelenecek UTF-8 formatındaki mesajı kullanıcıdan alır
try: #açık anahtar dosyasına erişmeye çalışır
with open('pubkey_file.pickle', 'rb') as pubkey_file:
pubkey = pickle.load(pubkey_file)
except FileNotFoundError: #dosya bulunamamışsa kullanıcıdan anahtarları ister
pubkey = rsa.key.PublicKey(*[int(i) for i in input('Acik anahtar giriniz: ').replace(' ', '').split(',')])
encoded_message = message.encode('utf8')
crypto = rsa.encrypt(encoded_message, pubkey) #istenen mesajı rsa ile şifreler
bits_array = BitArray(hex=crypto.hex()).bin #şifrelenmiş veriyi ikili sayı sisteme dönüştürür
print(bits_array)
np_img = numpy.array(img)
length = np_img.shape[1]
if length < 90:
raise Exception('Resim genişliği çok küçük')
for i in range(256):
np_img[90][i // 3][i % 3] = (np_img[90][i // 3][i % 3] & 0b11111110) + int(bits_array[i])
#şifrelenmiş sayı dizisinin değerlerini resmin sırasıyla kırmızı yeşil ve mavi renk değerlerinin son bitine atar
edit_img = Image.fromarray(np_img, 'RGB')
edit_img.save('out.png') #son resmi kaydeder
print('Resim kaydedildi')
Ek C. Deşifrelemenin Python dilindeki kodu
from PIL import Image
import numpy
import rsa
import pickle
img = Image.open('out.png')
try: #gizli anahtar dosyasına erişmeye çalışır
with open('privkey_file.pickle', 'rb') as key_file:
privkey = pickle.load(key_file)
except FileNotFoundError: #dosya bulunamamışsa kullanıcıdan anahtarları ister
pubkey = rsa.key.PrivateKey(*[int(i) for i in input('Kapalı anahtar giriniz: ').replace(', ').split(',')])
np_img = numpy.array(img)
img.close()
bits_array = ''
for i in range(256):
bits_array += str((np_img[90][i // 3][i % 3] % 2))
crypto = bytes([int(bits_array[i:i+8], 2) for i in range(0, 256, 8)])
print('encrypted message:', crypto)
print('decrypted:', rsa.decrypt(crypto, privkey).decode('utf8'))
28