PYTHON Şifreleme Sorunu

mehmetcolli (1) 5 yıl önce sordu

Arkadaşlar selam Proje ödevi olarak şifreleme yazılımı aldım. Pi sayısının ilk 10 sayısıyla sifreleyeceğim bu yazılımı. Yazılımda şöyle sade bir kodu ele aldım bir siteden. Fakat nerede hata yaptığımı bilmiyorum, direk alıp template gibi düzenleyemedim de.Python komut yerine atınca direkt hata veriyor. Sayıları harfe dönüştürecektim, şifre de o olacaktı güya. Bir yerde bir hata yaptım ama nerede bulamıyorum, yardımcı olur musunuz ?
KODU ALTA BIRAKMADAN ÖNCE ŞU SAYILAR ŞU HARFLERE DENK OLACAK

0-E 1-A 2-R 3-O 4-B 5-İ 6-R 7-S 8-D 9-I

KOD:

def getMode():
     while True:
        print('Çözmek mi Yoksa Şifrelemek mi istiyorsun?')
        mode = input(1).lower(A)
        if mode in 'encrypt e decrypt d'.split():
            return mode
        else:
            print('Enter either "encrypt" or "e" or "decrypt" or "d".')

def getMessage():
    print('Proje ödevim deneme:')
    return input()

 

def getKey():
    key = 0
    while True:
        print('Enter the key number (1-%s)' % (MAX_KEY_SIZE))
        key = int(input())
        if (key >= 1 and key <= MAX_KEY_SIZE):
            return key

def getTranslatedMessage(mode, message, key):
    if mode[0] == 'd':
        key = -key
    translated = ''
    for symbol in message:
        if symbol.isalpha():
            num = ord(symbol)
            num += key
            if symbol.isupper():
                if num > ord('Z'):      #90
                    num -= 26
                elif num < ord('A'):    #65
                    num += 26

            elif symbol.islower():
                if num > ord('z'):      #122
                    num -= 26
                elif num < ord('a'):    #97
                    num += 26
            translated += chr(num)
        else:
            translated += symbol
    return translated


mode = getMode()
message = getMessage()
key = getKey()

print('Proje Ödevim deneme:')
print(getTranslatedMessage(mode, message, key))

 

Bu sayıalrı bu harflere göre nasıl yazacağım, nereye yazacağım, Türkçesini nasıl çevireceğim umarım yardımcı olan çıkar şimdiden teşekürler...

Toplam 2 cevap


musakose2077 (40) 5 yıl önce cevapladı

Python diline ve şifreleme sistemlerine pek hakim değilim ama yazabildiğim kadarı ile, isteğine uygun bir program yazmaya çalıştım.

print("""
- - - - - - - - - - - - - - - - - - - - 
Şifreleme Programı

1 - Şifrele
2 - Çöz
- - - - - - - - - - - - - - - - - - - - 
""")

Selection = input("Seçiminiz: ")
Text = input("Metni Giriniz: ").lower()
ModifiedText = ""

if Selection == "1":
    for x in Text:
        if x == "e": ModifiedText += "0"
        elif x == "a": ModifiedText += "1"
        elif x == "r": ModifiedText += "2"
        elif x == "o": ModifiedText += "3"
        elif x == "b": ModifiedText += "4"
        elif x == "i": ModifiedText += "5"
        elif x == "m": ModifiedText += "6"
        elif x == "s": ModifiedText += "7"
        elif x == "d": ModifiedText += "8"
        elif x == "ı": ModifiedText += "9"
        else: ModifiedText += x

if Selection == "2":
    for x in Text:
        if x == "0": ModifiedText += "e"
        elif x == "1": ModifiedText += "a"
        elif x == "2": ModifiedText += "r"
        elif x == "3": ModifiedText += "o"
        elif x == "4": ModifiedText += "b"
        elif x == "5": ModifiedText += "i"
        elif x == "6": ModifiedText += "m"
        elif x == "7": ModifiedText += "s"
        elif x == "8": ModifiedText += "d"
        elif x == "9": ModifiedText += "ı"
        else: ModifiedText += x

print("Çıktı:",ModifiedText.capitalize())

Umarım bu kodlar azda olsa sizi bir fikir sahibi yapar.

- - - - - - - - - - - - - - - - - - - -

Düzenleme:

Hocam basit bir şey isterseniz yukarıdaki kodlara tüm alfabeyi ekleyerek istediğinizi elde edebilirsiniz veya daha gelişmiş bir şey isterseniz biraz aceleyle de olsa aşağıdaki kodları yazdım neredeyse her karakteri şifreliyor ve şifresini çözüyor.

İlk mesajımdan sonra bu konuyu biraz araştırmıştım, o sıra keşfettiğim secrets modülü ile sanırım çok daha gelişmiş bir şifreleme mantığı yapma şansınız var, isterseniz o modüle de bir göz atabilirsiniz.

import string

Characters = string.printable + 'Ç窺ÜüÖöĞğİı'
Strength = 5
Security = {i: str(((Characters.index(i)+1)**2) + 10 ** (Strength - 1))for i in Characters}


class Crypt():
    def __init__(self):
        self.Data = ['', '']
        self.Data[0] = input('Metniniz: ')

    def Encrypt(self):
        for Character in self.Data[0]:
            self.Data[1] += Security[Character]
        print(self.Data[1])

    def Decrypt(self):
        while len(self.Data[0])/Strength > 0:
            for x, y in Security.items():
                if self.Data[0][:Strength] == y:
                    self.Data[1] += x
                    break
            self.Data[0] = self.Data[0][Strength:]

        print(self.Data[1])


print("""
- - - - - - - - - - - - - - - - - - - - 
Şifreleme Programı

1 - Şifrele
2 - Çöz
Q - Çık
- - - - - - - - - - - - - - - - - - - - 
""")
while True:
    Selection = input('Seçiminiz: ')
    if Selection == '1':
        Crypt().Encrypt()
    elif Selection == '2':
        Crypt().Decrypt()
    elif Selection.lower() == 'q':
        break
    else:
        print('Hatalı Giriş!!')

 

mehmetcolli (1) 5 yıl önce cevapladı

@musakose2077 Tesekkur ederim. Ancak bir şey daha sormak istiyorum. Bunu konsol'a yapıştırınca bazı yerlerini degistirdim. Mesela 3 14159 yazınca konsola (pi sayısının ilk 6 sayısı) çıktı olarak belirlediğim harflerin yani "o abaiı" şeklinde çıkmasını istiyorumş. Bunu nasıl yapıcam ?

 

DÜZENLEME: Hocam dediğiniz gibi denedim evet bal kaymak gibi calısıyor. Ancak mesela 3 14159 yazınca bir metin nasıl oluyorsa, 3 14 yazınca da sadece "o ab" olması gibi istiyorum. Hangi harfi yazarsam karşısına bir sayı gelsin yani tek bir sayı ve tek bir şifre olmasın  gibisinden. Olmaz mı öyle ?

 

DÜZENLEME2: @musakose2077 Hocam çok sağolun, ancak bir şey soracağım. Bunu nasıl kullanabilirim ? Mesela "MUSA" yazısının şifreleme ve çözümü için nereleri değiştirip eklemem gerekiyor ? Yeniyim debiraz python'da. Bir kaç cümleyle açıklayabilir misiniz size zahmet ...

 

SON DUZENLEME: HOCAM KULLANMASINI ÖĞRENDİM VİSUAL'DEN, ÇOK SAĞOLUN TEŞEKKÜR EDERİM...

musakose2077 5 yıl önce

@mehmetcolli Bu kodlar ile o istediğiniz çıktıyı almanız lazım. Belki değiştirdiğiniz kodlarda bir sıkıntı olabilir.

musakose2077 5 yıl önce

@mehmetcolli İlk mesajı güncelledim.

musakose2077 5 yıl önce

@mehmetcolli Rica ederim