Autor |
Beitrag |
miLi0
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 25.12.06 00:38
Hallo also ich hab folgende Aufgabe bekommen,
Über den Klartext wird ein Schlüsselwort gelegt. Die Addition des ASCII-Codes des Klarbuchstaben und Buchstaben des Schlüsselwortes gibt den ASCII-Code des Geheimbuchstaben. Ein Beispiel mit dem Schlüsselwort „AUTO“, (Leerzeichen= 32)
Delphi-Quelltext 1: 2: 3:
| Schlüsselwort: A U T O A U T O Klartext: I C H H A B E Geheimtext (ASCII-Wert): 138 152 156 111 137 150 150 148 |
Beachten Sie, aus ‚H’ wird sowohl 156 als auch 137 und 150 steht sowohl für ‚A’ als auch für ‚B’.
Ich hab das soweit auch schon hinbekommen mit dem Verschlüsseln, nur bekomm ich das Entschlüsseln nicht hin. und das der ein leerzeichen lässt beim verschlüsseln krieg ich auch nicht hin, hat jemand ne idee?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| procedure TChiffrierprogramm.bt_oeffnenClick(Sender: TObject); begin if oeffnen.Execute then mem_klartext.lines.loadfromfile(oeffnen.filename) end;
procedure TChiffrierprogramm.bt_speichernClick(Sender: TObject); begin if speichern.execute then mem_geheimtext.lines.savetofile(speichern.filename+'.txt') end;
function verschluessle(inhalt, key: string): string; var neu: char; a,b :string; zaehler, pos, verschiebung :integer; begin a:= Chiffrierprogramm.mem_klartext.text; b:= Chiffrierprogramm.ed_schluesselwort.text; a:= lowercase (a); b:= lowercase (b); result:=''; for zaehler := 1 to length(a) do begin if a[zaehler] <> ' ' then begin pos := zaehler mod length(b); if (pos = 0) then pos := length(b); verschiebung := ord (b[pos]) - 97; neu := chr (ord(a[zaehler]) + verschiebung ); if (ord( neu )>122) then neu := chr (ord(neu) - 26 ); result := result + neu; Chiffrierprogramm.mem_geheimtext.text:=result; end; end end;
procedure TChiffrierprogramm.bt_verschluesselnClick(Sender: TObject); var a : String; begin verschluessle(a,a); mem_klartext.clear; end;
function entschluesslen(inhalt, key: string): string; var neu: char; a, b : string; zaehler, pos, verschiebung : integer; begin a:= Chiffrierprogramm.mem_geheimtext.text; b:= Chiffrierprogramm.ed_schluesselwort.text; a:= lowercase (a); b:= lowercase (b); result:=''; for zaehler := 1 to length(a) do begin pos := zaehler div length(b); if (pos = 0) then pos := length(b); verschiebung := ord (b[pos]) + 97; neu := chr (ord(a[zaehler]) + verschiebung ); if (ord( neu )>122) then neu := chr (ord(neu) + 26 ); result := result + neu; Chiffrierprogramm.mem_klartext.text:=result; end;
end;
procedure TChiffrierprogramm.bt_entschluesselnClick(Sender: TObject); var a : String; begin entschluesslen(a,a); mem_geheimtext.clear; end; | Moderiert von Christian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 24.12.2006 um 23:45
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mo 25.12.06 00:40
Hier hab ich eine wunderschöne Seite gefunden, die das erklärt.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 25.12.06 00:47
miLi0 hat folgendes geschrieben: | und das der ein leerzeichen lässt beim verschlüsseln krieg ich auch nicht hin, hat jemand ne idee? |
Nun, was das Leerzeichen angeht: Was meinst du? Was soll mit einem Leerzeichen denn passieren?
Jedenfalls seh ich mir die Entschlüsselung mal an... Aber das sieht mir eigentlich zu kompliziert aus, ich denke das geht auch einfacher (// EDIT: Ok doch nicht...). Aber mal kucken...
// EDIT:
Chryzler hat folgendes geschrieben: | Hier hab ich eine wunderschöne Seite gefunden, die das erklärt. |
 Da hast du auch wieder Recht...
Zuletzt bearbeitet von jaenicke am Mo 25.12.06 01:10, insgesamt 1-mal bearbeitet
|
|
miLi0 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 25.12.06 00:51
Ich wollte das der wenn ich verschlüssel das Leerzeichen auch mit in den Geheimtext übernimmt. das geschieht ja auch aber eben wenn ich z.B.
Hallo Peter
mit
otto
versclüssel
bekomme ich "vtezcishxk"
Ich will aber "vtezc dxmsf" bekommen da ja wenn ich nur peter mit otto verschlüsseln würde "dxmsf" das bekomme.
Ich verschlüssele ja das leerzeichen mit aber gibt dann bei der ausgabe trotzdem keinen wert an. Das ist mein prob.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 25.12.06 00:55
|
|
miLi0 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 25.12.06 00:59
Delphi-Quelltext 1: 2: 3:
| Schlüsselwort: A U T O A U T O Klartext: I C H H A B E Geheimtext (ASCII-Wert): 138 152 156 111 137 150 150 148 |
und ich muss es so machen das auch das leerzeichen verschlüsselt wird und dann wieder den ascii wert also jetz 111 wieder in ein zeichen ausgibt. das macht er ja auch nicht.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 25.12.06 01:05
Ja, ist mir schon klar, aber warum hast du denn dann mit dem if dafür gesorgt, dass du nur Zeichen ungleich Leerzeichen verschlüsselst und in den verschlüsselten Text schreibst??
|
|
miLi0 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 25.12.06 12:54
stimmt, hat jemand schon ne ahnung, sitz da beißend vor kriegs aber net gebacken
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 25.12.06 14:29
Dass die Verschlüsselung gar nicht das produziert was sie laut deinem Beispiel und dem Aufgabentext soll ist dir aber hoffentlich schon klar, oder?
Diesen Algorithmus kann man auch nehmen, das ist aber nicht der, der in der Aufgabe gefordert wird.
Ich behaupte mal, dass du den irgendwo kopiert hast und dir nicht wirklich klar ist, was der eigentlich macht!
Ihr sollt einfach die Ascii-Codes komplett addieren. Der Code addiert aber nur ord (b[pos]) - 97; hinzu und rotiert dann, wenn das ganze keinen Buchstaben mehr ergeben würde...
Da kommt also Text bei heraus, bei deiner Aufgabenstellung nicht!!!
//EDIT: Ok, ich hab das mal ganz kurz geschrieben... Ich nehme an so solltet ihr das auch schreiben...
Es fehlt absichtlich noch was... Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TfrmMain.btnEncryptClick(Sender: TObject); var i: Integer; begin SetLength(DestString, Length(memSource.Text)); for i := 1 to Length(memSource.Text) do DestString[i] := Chr(Ord(memSource.Text[i]) + Ord(edtKey.Text[i mod Length(edtKey.Text)])); end; |
// EDIT:  Dummer Fehler behoben...
Aber die Entschlüsselung dazu bekommst du nicht von mir! Und ich möchte auch alle anderen bitten, die nicht zu schreiben...
Dieser kleine Source ist ja wirklich nicht viel, versteh den erstmal und dann kannst du dazu auch die Entschlüsselung schreiben. Sonst frag, wenn du was nicht verstehst!! schwan
Zuletzt bearbeitet von jaenicke am Di 26.12.06 17:52, insgesamt 2-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 26.12.06 16:11
Das hier stammt aus der identischen Fragestellung von Scraffy ( hier):
Scraffy hat folgendes geschrieben: | Opps^^ sry hatte deinen Link ja völlig übersehen xD....okay habs mir angeguckt aber kannst du mir vielleicht sagen wie ich ads mit dem von mir schon geschriebenen wuelltext mahcen kann!! Das wäre doch eh viel besser!!! Thx |
Erstmal die Frage: Ist deine Fragestellung exakt identisch? Also so wie die hier oben im Thread? Vor allem was das Beispiel angeht!
Und woher hast du eigentlich den Quelltext? Also von dir ist er ja offensichtlich nicht...
|
|
Scraffy
      
Beiträge: 31
|
Verfasst: Di 26.12.06 16:32
HI
der is z.T. von mir aber zum grösseren Teil^^ ich brauchte nur nen Dankanstoss....xD..
|
|
Scraffy
      
Beiträge: 31
|
Verfasst: Di 26.12.06 16:44
Okay hab mich jetzt an das beartbeiten deines Quelltextes gemacht jaenicke....was genau ist denn dieser DestString? Ich hab das noch nie gehört??? ist das ein normaler String und muss ich das dann auch genau so deklarieren!?
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 26.12.06 16:51
DestString ist ein normaler String, ja. Dest kommt von Destination. Das ist also das Ziel für den verschlüsselten String...
Und Dest String hab ich den nur genannt um zu verdeutlichen, dass es ein String ist  .
|
|
Scraffy
      
Beiträge: 31
|
Verfasst: Di 26.12.06 17:01
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function entschluessle(inhalt, key: string): string; var i: Integer; DestString : String; begin SetLength(DestString, Length(Form1.memGeheimtext.Text)); for i := 0 to Length(Form1.memGeheimtext.Text) - 1 do DestString[i] := Chr(Ord(Form1.memGeheimtext.Text[i]) + Ord(Form1.edschluessel.Text[i mod Length(Form1.edSchluessel.Text)])); Form1.memKlartext.Text:=DestString; end; |
So, dass ist raus gekommen, nachdem ich alles geändert habe, wie ich denke das es stimmt...nun leider bekomme ich nun zeichen nach dem entschlüsseln, die ich noch nie gesehen habe xD...wie kann das sein??? hab ich etwas falsch gemacht?
sry was ich vielleicht erwähnen sollte: ich rufe die Funktion in einer Prozedur so auf:
entschluessele(a,a);
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 26.12.06 17:07
Das ist die Methode zum VERschlüsseln...
Dazu musst du lediglich seeehr wenig ändern, dann entschlüsselt es.
Aber nicht das, was bei deiner "Verschlüsselung" herauskommt, denn aus durch "deine" Methode verschlüsseltem Text könnte man den nicht wieder herausholen. Aus dem verschlüsselten Satz "Das ist ein Test." würde nur noch "dasisteintest." wieder herauskommen.
Aber wie gesagt: Du hast dort eine Verschlüsselungsmethode und du musst dazu die Entschlüsselungsmethode schreiben. Die ist aber praktisch identisch. Und wenn du den Quelltext verstanden hast, dann müsste dir auch die Entschlüsselung klar sein. Ansonsten: Frag, was du da dran nicht verstehst!
BTW: Wozu übergibst du eigentlich inhalt, key: string, wenn du die dann gar nicht benutzt??? Dann kannst du das doch auch als normele Prozedur ohne Parameter und Rückgabewert schreiben.
Aber wie ist eigentlich deine Aufgabenstellung? Die Ascii-Codes addieren, wie in der Fragestellung oben? Oder tatsächlích Text (verschlüsselten) wieder herausbekommen (das ist was anderes, das ist so ähnlich wie der von dir gepostete Quelltext).
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 26.12.06 17:14
|
|
|