ich habe aus etwas Lust und Zeit heraus ein kleines Script geschrieben, dass einen Text, den man dem Script mitgibt, verschlüsselt und im selben Durchlauf auch wieder entschlüsselt (entspricht in etwas der Cäsar-Verschlüsselung).
Das Script generiert aus einem vordefinierten Alphabet (Buchstaben, Zahlen, Sonderzeichen) ein neues Alphabet in dem alle Zeichen durch eine Zufallsmethode durchgewüfelt werden (Ja, ich weiss, dass es nicht wirklich 100%ig zufällig ist, aber das sollte auch nur erstmal als Übung sein). Dann wird das neu generierte Alphabet um so viele Positionen geshiftet (also verschoben), wie man dem Aufrufer mitgibt.
Beide Alphabete dienen dann zur Ver- und Entschlüsselung des Originaltextes, indem die entsprechenden Positionen jedes einzelnen Buchstabens im geshifteten Alphabet durchsucht und durch den entsprechend neuen Buchstaben ersetzt werden.
Beim Entschlüsseln passiert das genau anders herum.
Na ja, ich weiss, das ist keine Verschlüsselung im Sinne heutiger Standards, aber als Übung machts mir Spass sowas zu entwickeln und damit zu spielen.
Was hättet Ihr in dieser ersten Rohversion anders/besser gemacht? (Es fehlen natürlich noch viele Sachen, auch entsprechende try-except Blöcke fehlen erstmal).
Hier das Script:
Code: Alles auswählen
#!c:\python26\python.exe
# -*- coding: utf-8 -*-
#@Author: ne0h
#@Date: 06.10.2008
""" This script implements some simple encryption/decryption.
An pre-defined alphabet with various characters is randomized
with the standard randint()-method and generates a new alphabet
each time the encryption is started. After that the alphabet
is shifted as many positions are passed in. The text passed into the
script gets encrypted and decrypted and the last method prints out
the original text, the encrypted text and the decrypted text."""
import random
class Crypt(object):
encryptedText = ""
decryptedText = ""
def __init__(self):
self.text = raw_input("Gib Deinen Text ein: ")
self.shift = int(raw_input("Um wie viele Stellen soll geshiftet werden: "))
self.alphabet = self.randomizeAlphabet()
self.shiftedAlphabet = self.shiftAlphabet(self.alphabet, self.shift)
def main(self):
# print self.alphabet
# print self.shiftedAlphabet
encryptedText = self.encrypt(self.alphabet, self.shiftedAlphabet, self.text)
decryptedText = self.decrypt(self.alphabet, self.shiftedAlphabet, encryptedText)
self.printText(self.text, encryptedText, decryptedText)
def randomizeAlphabet(self):
num = 0
bitSet = []
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F',
'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z', ' ', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!',
'"', '$', '%', '&', '/', '(', ')', '=', '?', '{', '[', ']', '}', '.', ',', ';',
':', '-', '_', '<', '>', '|', '^', '*', '+', '~', '#', '@', '\\']
randomizedAlphabet = []
randPoolMaxInt = len(alphabet)
for i in range(0, randPoolMaxInt):
while num in bitSet:
num = random.randint(0, randPoolMaxInt - 1)
if num not in bitSet: #if random int not in bitSet...
bitSet.append(num) #....set it in there
randomizedAlphabet.append(alphabet[num])
return randomizedAlphabet
def shiftAlphabet(self, alphabet, shift):
j = 0
shiftedAlphabet = []
for i in range(shift, len(alphabet)):
shiftedAlphabet.append(alphabet[i])
for l in range(i - (shift - 1), len(alphabet)):
shiftedAlphabet.append(alphabet[j])
j += 1
return shiftedAlphabet
def encrypt(self, alphabet, shiftedAlphabet, text):
encryptedText = ""
for i in range(0, len(text)):
for j in range(0, len(alphabet)):
if alphabet[j] == text[i]:
encryptedText += shiftedAlphabet[j]
break
return encryptedText
def decrypt(self, alphabet, shiftedAlphabet, encryptedText):
decryptedText = ""
for i in range(0, len(encryptedText)):
for j in range(0, len(shiftedAlphabet)):
if shiftedAlphabet[j] == encryptedText[i]:
decryptedText += alphabet[j]
break
return decryptedText
def printText(self, text, encryptedText, decryptedText):
print
print "Original text: %s" % (text, )
print "Encrypted text: %s" % (encryptedText, )
print "Decrypted text: %s" % (decryptedText, )
if __name__ == "__main__":
crypt = Crypt()
crypt.main()
Gruss
ne0h