nur ein kleines problem ;)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sebby
User
Beiträge: 2
Registriert: Mittwoch 19. August 2009, 12:05

hallo :D
also mein problem ist das ich es einfach nicht hin bekomme bei der entschlüsselung 'y' in der schleife irgendwie in einer neuen variablen zb. 'v' zu speichern. und die neu dazu kommenden 'y' dazu zu zählen.
und keine sorge, dictionary wird später noch gefüllt.

ich poste mal ver- und entschlüsselung.

verschlüsselung:

Code: Alles auswählen

d = {'a' : '6107755365326039', 'b' : '2996515598372639',
     'c' : '6173372668179101', 'd' : '2209554203040618'}

text = raw_input('zu verschluesselnder text:')

geheimtext = ""

while text:
    x = text[:1]
    text = text[1:]
    geheimtext += d[x]   

k = geheimtext[:8]
geheimtext = geheimtext[8:]
print k

while geheimtext:
    x = geheimtext[:32]
    geheimtext = geheimtext[32:]
    y = x[16:] + x[:16]
    print y
entschlüsselung:

Code: Alles auswählen

d = {'6107755365326039' : 'a', '2996515598372639' : 'b', 
     '6173372668179101' : 'c', '2209554203040618' : 'd'} 

text = raw_input('zu entschluesselnder text:') 

k = text[:8]

text = text[8:]

while text:
  c = text[:32]
  text = text[32:]
  y = c[16:] + c[:16]

# hier die summe speichern von y ca. so: v = y + y <- hier hänge ich 

# und hier müsste ne gleichung hin. ungefair so: e = k + v

e="" 

while e: 
  x = e[:16] 
  e = e[16:] 
  e += d[x]

print e
freue mich auf eure hilfen :D
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Nun, wenn es Dir nur um das Aufsummieren geht, dann mach es doch :-)

Code: Alles auswählen

y = ""
while text: 
  c = text[:32] 
  text = text[32:] 
  y += c[16:] + c[:16]
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hallo nochmal,

hier könnte man z.B. auch meine vorgestelle Splitterfunktion verwenden:

Code: Alles auswählen

def splitter(s, length=3): 
    i = 0 
    while i<len(s): 
        yield s[i:i+length] 
        i += length 

y = ""
for c in splitter(text, length=32):
    y += c[16:] + c[:16]
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Irgendwie wundert es mich nicht, dass du bei den Variablen-Namen Probleme hast.
Und Python ist das erst recht nicht. Du schreibst vllt in Python-Syntax, das wars aber auch schon.

Das hier ist uebrigens alles, was du fuer deine Verschluesselung brauchst - die, ehrlich gesagt, alles andere als brauchbar ist.

Code: Alles auswählen

def encrypt(text, encryption_table):
	encrypted = ''
	for char in text:
		encrypted += encryption_table[char]
	return encrypted

Code: Alles auswählen

def decrypt(encrypted, decryption_table, crypt_length):
	clear = ''
	for slice in splitter(encrypted, crypt_length):
		clear += decryption_table[slice]		
	return clear
Der Splitter steht bei Michael.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi cofi,

das sieht natürlich sauberer aus, aber wenn Du schon optimierst, dann

1. ist slice schon reserviert und sollte aus meiner Sicht prinzipiell nicht als eigener Name verwendet werden,

2. ist es AFAIK performanter als viele Stringadditionen, wenn man eine Liste von Chunks erzeugt, die zum Schluss mit list.join zusammengefügt werden und

3. behaupte ich nicht, dass mir klar ist was Sebby da vor hat, aber zum vorgegebenen Algorithmus gehört auch, dass jeweils die ersten und zweiten 16 Bytes eines 32 Byte Chunks gegeneinander vertauscht werden.

[edit]Sorry, sollte bei 2. natürlich 'string.join' heißen![/edit]
Zuletzt geändert von Michael Schneider am Mittwoch 19. August 2009, 16:00, insgesamt 1-mal geändert.
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Sebby
User
Beiträge: 2
Registriert: Mittwoch 19. August 2009, 12:05

ich bedanke mich für die antworten.
ich weiß auch das es nicht das beste programm zum verschlüsseln ist,
aber ich mach das ja auch nicht als beruf sondern als hobby, weil es mir spass macht.
:arrow: aber ich nehme natürlich auch negative kritik an.

aber wie gesagt vielen dank für die antwort :D
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das muss man aber als Einzeiler vekaufen...

Code: Alles auswählen

def encrypt(text, table):
    return "".join(map(table.get, text))

def decrypt(encrypted, table, length):
    return "".join(map(table.get, splitter(encrypted, length)))
Eigentlich kann man auch gleich eine Funktion draus machen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@Michael Im Prinzip hast du mit slice recht, allerdings ist das fuer direkte Nutzung eher unbrauchbar, gleichzeitig ist der Scope ja sehr begrenzt.
Library Reference hat geschrieben:slice([start], stop, [step])
Return a slice object representing the set of indices specified by range(start, stop, step). The
start and step arguments default to None. Slice objects have read-only data attributes start, stop and
step which merely return the argument values (or their default). They have no other explicit functionality;
however they are used by Numerical Python and other third party extensions. Slice objects are also generated
when extended indexing syntax is used. For example: a[start:stop:step] or a[start:stop,
i].
Den Algorithmus hatte ich nur ueberflogen, da ist mir das nicht aufgefallen, aber das war sowieso als Aufgabe fuer den OP gedacht :twisted:

Und um Optimierung gings mir gar nicht, eher das ganze mal in einer lesbaren Form zu haben.

@OP: Die Kritik ist ganz klar: Schreib lesbaren Code und trenne ihn in saubere Abschnitte.
Antworten