![]() |
Verschlüsselung
Ich bin Anfänger und bin grad dabei ein Verschlüsselungsprogramm zu schreiben. Codieren klappt bestens, aber das decodieren will mir nicht gelingen. Ich kann machen was ich will, aber mit dieser Prozedur will das einfach nicht klappen - wird wahrscheinlich ziemlich falsch sein, aber ich bin eben Anfänger...
Nun meine Bitte an Euch - Helft mir, denn ich komm nicht mehr weiter und mein Latein ist am Ende... Kann mir bitte jemand diese Prozedur so umschreiben, dass ich damit Texte decodieren kann? Vielen Dank für Eure Hilfe ;)
Delphi-Quellcode:
var
i : integer; EncodedKey : string; Key : Char; Geheimtext : Array[65..90] OF String = ('XZYJVPQ','XYJVPQZ', 'JXZYVPQ', 'XZYJQVP', 'XZJVPQY', 'XZYVJPQ', 'JVPQXZY', 'ZYJVXPQ', 'JVPXZYQ','XVZYJPQ', 'XZYQJVP', 'XZJVYPQ', 'XZYJPVQ', 'XZYJVQV', 'XYJZVPQ', 'XYJVZPQ', 'YJVPQXZ' ,'QXZYJVP', 'XZYPJVQ','ZYJVPQX', 'XZYVJPQ' , 'XZJYVPQ','XZYJVQP','ZYJXVPQ', 'XZYJPQV' ,'XZYVPQJ'); begin Klartext := '' ; Vorbehandeln(Geheimtext); For i:=65 TO 90 DO if Geheimtext = Geheimtext[i] then begin result := Chr(i); exit; end; result := '*'; end; Case Key of 'XZYJVPQ': EncodedKey:= 'A'; 'XYJVPQZ': EncodedKey:= 'B'; 'JXZYVPQ': EncodedKey:= 'C'; 'XZYJQVP': EncodedKey:= 'D'; 'XZJVPQY': EncodedKey:= 'E'; 'XZYVJPQ': EncodedKey:= 'F'; 'JVPQXZY': EncodedKey:= 'G'; 'ZYJVXPQ': EncodedKey:= 'H'; 'JVPXZYQ': EncodedKey:= 'I'; 'XVZYJPQ': EncodedKey:= 'J'; 'XZYQJVP': EncodedKey:= 'K'; 'XZJVYPQ': EncodedKey:= 'L'; 'XZYJPVQ': EncodedKey:= 'M'; 'XZYJVQV': EncodedKey:= 'N'; 'XYJZVPQ': EncodedKey:= 'O'; 'XYJVZPQ': EncodedKey:= 'P'; 'YJVPQXZ': EncodedKey:= 'Q'; 'QXZYJVP': EncodedKey:= 'R'; 'XZYPJVQ': EncodedKey:= 'S'; 'ZYJVPQX': EncodedKey:= 'T'; 'XZYVJPQ': EncodedKey:= 'U'; 'XZJYVPQ': EncodedKey:= 'V'; 'XZYJVQP': EncodedKey:= 'W'; 'ZYJXVPQ': EncodedKey:= 'X'; 'XZYJPQV': EncodedKey:= 'Y'; 'XZYVPQJ': EncodedKey:= 'Z'; end; Klartext := Klartext + EncodedKey; end; end; |
Re: Verschlüsselung
Hallo und herzlich Willkommen in der DP!
Schau Dir dochmal ![]() Vielleicht bringt es Dir ja was... |
Re: Verschlüsselung
Stimmt, ist im Prinzip das gleiche, aber ich kenne einige Befehle nicht, deshlab hilft es mir nicht unbedingt weiter...
Könntest du mir nicht die Prozedur richtig stellen? Ich blick da grad nicht mehr durch :wall: :roll: |
Re: Verschlüsselung
anscheinend hast du den variablennamen "geheimtext" doppelt benutzt. das musst du schonmal ändern. du kannst in einer case abfrage nicht einfach strings benutzen, das müssen schon zahlen sein. fals du doch mit case arbeiten willst, würd ich dir ne stringlist empfehlen. da kannst du dann den index abfragen.
mfg |
Re: Verschlüsselung
Kann ich die Case Schleife nicht z.B. in eine While Schleife umändern?
|
Re: Verschlüsselung
Zitat:
|
Re: Verschlüsselung
[edit]Irgendwie ist das hier im falschen Thread gelandet! :shock:[/edit]
Chris |
Re: Verschlüsselung
Hi,
sag mal, welche Art von Verschlüsselung soll das denn sein? Gibt man da gar keinen Schlüssel ein? Dass würd ich schon eher XOR verschlüsseln: Klartext ist der Klartext, Result ist (im Endeffekt) der Geheimtext, Passwd das Passwort:
Delphi-Quellcode:
Diese function musst du natürlich noch deklarieren
function TForm1.CodeText(Klartext, Passwd : string):string;
var i : longword; begin for i := 0 to length(Klartext)-1 do begin Result := Result + Char(ord(Klartext[i]) xor ord(Passwd[i mod length(passwd)])); end; end; function CodeText(Klartext, Passwd : string):string; indem du obige Zeile unterhalt von type in der Rubrik private einfügst. Jetzt kannst du dir ein Memo-Feld, ein Edit-Feld und 'nen Button bauen. Dann bekommt der Button folgende Funktion:
Delphi-Quellcode:
Und schon geht das ;-)
Memo1.Text := CodeText(Memo1.Text,Edit1.Text);
Du kannst bei XOR übrigens Entschlüsseln, indem zu den verschlüsselten Text wieder verschlüsselst! Noch etwas: Der oben genannte Code sollte funzen, ich hab ihn aber nur aus dem Kopf geschrieben. Wenn es nicht geht, dann sag bescheid. MfG, Daniel. |
Re: Verschlüsselung
Das ist meine Verschlüsselung - läuft bestens :lol:
Delphi-Quellcode:
var
i : integer; EncodedKey : string; Key : Char; begin Geheimtext := '' ; Vorbehandeln(Klartext); For i:=1 to length(Klartext) do begin key:=Klartext[i]; Case Key of 'A': EncodedKey:= 'XZYJVPQ'; 'B': EncodedKey:= 'XYJVPQZ'; 'C': EncodedKey:= 'JXZYVPQ'; 'D': EncodedKey:= 'XZYJQVP'; 'E': EncodedKey:= 'XZJVPQY'; 'F': EncodedKey:= 'XZYVJPQ'; 'G': EncodedKey:= 'JVPQXZY'; 'H': EncodedKey:= 'ZYJVXPQ'; 'I': EncodedKey:= 'JVPXZYQ'; 'J': EncodedKey:= 'XVZYJPQ'; 'K': EncodedKey:= 'XZYQJVP'; 'L': EncodedKey:= 'XZJVYPQ'; 'M': EncodedKey:= 'XZYJPVQ'; 'N': EncodedKey:= 'XZYJVQV'; 'O': EncodedKey:= 'XYJZVPQ'; 'P': EncodedKey:= 'XYJVZPQ'; 'Q': EncodedKey:= 'YJVPQXZ'; 'R': EncodedKey:= 'QXZYJVP'; 'S': EncodedKey:= 'XZYPJVQ'; 'T': EncodedKey:= 'ZYJVPQX'; 'U': EncodedKey:= 'XZYVJPQ'; 'V': EncodedKey:= 'XZJYVPQ'; 'W': EncodedKey:= 'XZYJVQP'; 'X': EncodedKey:= 'ZYJXVPQ'; 'Y': EncodedKey:= 'XZYJPQV'; 'Z': EncodedKey:= 'XZYVPQJ'; end; Geheimtext := Geheimtext + EncodedKey; end; end; @ Daniel B: "Key: Char;" und somit geht das ganze schon" Key: Char hab ich doch geschrieben, aber funzen tut das ganze trotzdem nicht! @ Daniel-Volk: Das ist ne Caesar- Verschlüsselung, die wir für die Schule machen müssen. Eine andere, wo man den Schlüssel eingibt, haben wir bereits gemacht - läuft auch. Aber die will absolut nicht funktionieren und ich komm einfach nicht mehr weiter... Übrigens Caesar - Bedeutet: Verschlüsseln durch tauschen von Buchstaben :wink: |
Re: Verschlüsselung
Zitat:
|
Re: Verschlüsselung
Zitat:
edit: char funktioniert auch nur, weil es ja eigendlich dem Byte entspricht bzw das gleiche ist. |
Re: Verschlüsselung
so.. ich hoffe mal ich hab verstanden was du genau vorhast. hier wäre dann eine lösung:
Delphi-Quellcode:
also es sollte eigentlich klappen, nur werden da noch keine satzzeichen, blanks etc behandelt, sondern nur deine vorgegebenen zeichenfolgen.
var i, j: integer;
sBuffer: String; sGeheimText: String; sKlarText: String; const ZeichenErsatz: array[65..90] of String[7] =( 'XZYJVPQ','XYJVPQZ', 'JXZYVPQ', 'XZYJQVP', 'XZJVPQY', 'XZYVJPQ', 'JVPQXZY', 'ZYJVXPQ', 'JVPXZYQ','XVZYJPQ', 'XZYQJVP', 'XZJVYPQ', 'XZYJPVQ', 'XZYJVQV', 'XYJZVPQ', 'XYJVZPQ', 'YJVPQXZ','QXZYJVP', 'XZYPJVQ','ZYJVPQX', 'XZYVJPQ' , 'XZJYVPQ','XZYJVQP','ZYJXVPQ', 'XZYJPQV' ,'XZYVPQJ'); begin sGeheimText:= 'ZYJVXPQXZYJVPQXZJVYPQXZJVYPQXYJZVPQ'; for i:=1 to length( sGeheimtext) div 7 do begin sBuffer:= copy( sGeheimText, 1, 7); delete( sGeheimText, 1, 7); for j:=65 to 90 do begin if ZeichenErsatz[j]= sBuffer then sKlarText:= sKlarText+ Chr(j); end; end; ShowMessage( sKlarText); end; mfg |
Re: Verschlüsselung
@ Curby:
Zitat:
Beispiel: Du willst mit D verschlüsseln. Statt eines A wird dann also D geschrieben. -> Verschiebung um 3. Angenommen Alph ist eine Konstante mit deinem Alphabet, dann ergibt sich folgendes:
Delphi-Quellcode:
Ich hoffe das hat dir geholfen.
// Verschlüsseln:
Geheimbuchstabe := Alph[(pos(UPPERCASE(Klartextbuchstabe),Alph)+pos(Schlüssel,Alph)-1) mod length(Alph)]; //Entschlüsseln: Klartextbuchstabe := Alph[(pos(UPPERCASE(Geheimbuchstabe),Alph)+pos(Schlüssel,Alph)-1) mod length(Alph)]; MfG, Daniel. |
Re: Verschlüsselung
@ anku
Ja, danke - genau das habe ich gesucht, jedoch funktioniert dein Quellcode nicht. Egal was du als Geheimtext eingibst, wird immer das Wort "Hallo" dekodiert! Dies Zeile wird immer dekodiert: "sGeheimText:= 'ZYJVXPQXZYJVPQXZJVYPQXZJVYPQXYJZVPQ';" Er liest jedoch nicht die Zeile ein, die ich geschrieben habe und somit klappt das leider nicht... :roll: Wie kann man den Quelltext so ändern, dass er den Geheimtext nimmt und diesen Ausliest - dadrin liegt momentan meiner Ansicht nach das Problem. |
Re: Verschlüsselung
Die Zeile war ja nur als test drin, ob es auch funktioniert. Du kannst ja einfach schreiben
Delphi-Quellcode:
aber um dir genau zu sagen wie du es verändern musst, weiss ich nicht genug über dein Programm. Du arbeitest ja anscheinend mit globalen Variablen, oder? Wenn du das "verschlüsseln" selber geschrieben hast, dann solltest du auch in der Lage sein meine Version so abzuändern dass sie für dich richtig funktioniert.
sGeheimText:= Geheimtext;
Ich nehme mal an ihr werdet da auch Klausuren drüber schreiben und da kannst du dir ja auch nicht per Copy&Paste aus dem DP Forum helfen lassen!! Also musst du schon verstehen was dein Programm wie macht. Setz doch einfach mal einen Breakpoint an den Anfang der Procedure und geh dann schrittweise mit F8 weiter vor, um zu sehen was dort genau passiert. MfG |
Re: Verschlüsselung
Schon klar - eine Klausur werden wir darüber nicht schreiben, dafür machen wir dieses Projekt...
Deshlab will ich hier eine gute Note bekommen, aber das gute alte Entschlüsseln will noch nicht... Ich probier jetzt erstmal die neue Variante von Dir :wink: |
Re: Verschlüsselung
Hab jetzt den Quelltext so umgeschrieben, dass nun alles passt, aber ich habe Probleme bei den Leerzeichen. Wie kann man denn die Leerzeichen übernehmen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz