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
   32   33   34   35   36   37   38   39   40   41   42