Autor |
Beitrag |
newbie333
      
Beiträge: 43
|
Verfasst: Fr 03.07.09 16:37
Hallo
Ich versuche ein kleines "Verschlüsslungsprogramm" zu programmieren. Bin aber immernoch neu auf dem Gebiet des Programmierens
Wie kann ich das denn machen, wenn ich zum Beipiel dem Buchstaben A den Buchstaben B zuordnen will. B -> C, C-> D usw. wie sieht das in Delphi aus?
habs schon ausprobiert aber wurde nichts..
ich kanns ja mal zeigen..
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: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91:
| procedure TForm1.Button1Click(Sender: TObject); var klartext,laenge,n,position:integer; neu,buchstabe:string; begin klartext:=strtoint(edit1.text); laenge:=length(edit1.text); n:=laenge; position:= length(inttostr(n)); neu:=' '; while n <> 0 do begin if position = strtoint('a') then buchstabe:='g'; neu:=neu+buchstabe; if position = strtoint('b') then buchstabe:='h'; neu:=neu+buchstabe; if position = strtoint('c') then buchstabe:='i'; neu:=neu+buchstabe; if position = strtoint('d') then buchstabe:='j'; neu:=neu+buchstabe; if position = strtoint('e') then buchstabe:='k'; neu:=neu+buchstabe; if position = strtoint('f') then buchstabe:='l'; neu:=neu+buchstabe; if position = strtoint('g') then buchstabe:='m'; neu:=neu+buchstabe; if position = strtoint('h') then buchstabe:='n'; neu:=neu+buchstabe; if position = strtoint('i') then buchstabe:='o'; neu:=neu+buchstabe; if position = strtoint('j') then buchstabe:='p'; neu:=neu+buchstabe; if position = strtoint('k') then buchstabe:='q'; neu:=neu+buchstabe; if position = strtoint('l') then buchstabe:='r'; neu:=neu+buchstabe; if position = strtoint('m') then buchstabe:='s'; neu:=neu+buchstabe; if position = strtoint('n') then buchstabe:='t'; neu:=neu+buchstabe; if position = strtoint('o') then buchstabe:='u'; neu:=neu+buchstabe; if position = strtoint('p') then buchstabe:='v'; neu:=neu+buchstabe; if position = strtoint('q') then buchstabe:='w'; neu:=neu+buchstabe; if position = strtoint('r') then buchstabe:='x'; neu:=neu+buchstabe; if position = strtoint('s') then buchstabe:='y'; neu:=neu+buchstabe; if position = strtoint('t') then buchstabe:='z'; neu:=neu+buchstabe; if position = strtoint('u') then buchstabe:='a'; neu:=neu+buchstabe; if position = strtoint('v') then buchstabe:='b'; neu:=neu+buchstabe; if position = strtoint('w') then buchstabe:='c'; neu:=neu+buchstabe; if position = strtoint('x') then buchstabe:='d'; neu:=neu+buchstabe; dec(n); end; label1.caption:=neu; end; end. |
Wäre nett, wenn jemand helfen könnte..
Danke schonmal. Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Fr 03.07.2009 um 16:56
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Fr 03.07.09 18:14
Wie meinst du das denn, das es nichts wurde?
Das sich dein Quelltext nicht übersetzen lässt ist ja klar.
StrToInt wandelt einen String in dem eine oder mehrere Ziffern hintereinander stehen in dessen numerische Entsprechung um.
Um den ASCII Code eines Zeichens zu bekommen musst du Ord() verwenden, zurück zu einem Zeichen kommt du mit Char()Chr().
Wenn du das Zeichen als Zahl (ASCII Code) vorliegen hast kannst du abziehen oder addieren was du willst.
Also würde dein spass so aussehen (pseudocode)
Quelltext 1: 2: 3: 4: 5:
| zieltext ist leer; über laufvariable von 1 bis länge des klartextes aktuelles zeichen = zeichen von klartextes an der stelle der laufvariable; neues zeichen = als zeichen ( als ASCII Code ( aktuelles zeichen ) +1 ); zieltext = zieltext und neues zeichen |
// € : Char durch Chr ersetzt 
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Zuletzt bearbeitet von Sinspin am Fr 03.07.09 20:19, insgesamt 1-mal bearbeitet
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Fr 03.07.09 18:31
Also ich könnte mir jetzt gerade vorstellen, dass es doch eigentlich einfach so gehen müsste:
Delphi-Quelltext 1: 2: 3: 4:
| for i:=0 to length(memoZuVerschluzesselnderText)-1 do begin memoZuVerschluesselnderText.Text[i]:=IntToStr(StrToInt(memoZuVerschluesselnderText.Text[i])+1); end; |
Das müsste dann doch eigentlich genau Deinen erwünschten Effekt (A wird zu B, B zu C...) haben!
Ich habe jetzt hier aber leider gerade nicht direkt die Möglichkeit, es auszuprobieren...
Nur dadurch hast Du das Original danach dann nicht mehr - also müsstest Du das dann wohl besser doch mit einem zweiten Memo (oder RichEdit) machen.
Zuletzt bearbeitet von ffgorcky am Fr 03.07.09 18:39, insgesamt 2-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 03.07.09 18:34
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Fr 03.07.09 18:43
Also ich meine doch, dass jedes Zeichen doch auch direkt in eine Zahl umwandelbar ist - oder bin ich da jetzt "auf dem Holzweg"?
PS: jaenicke, ich habe jetzt auch gleich mal eben mein vorheriges Posting auf Deinen Hinweis hin verbessert.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 03.07.09 18:50
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 03.07.09 21:10
|
|
newbie333 
      
Beiträge: 43
|
Verfasst: Fr 03.07.09 22:07
ok, ich versuch das morgen mal.
ich sag dann bescheid. Danke 
|
|
newbie333 
      
Beiträge: 43
|
Verfasst: Sa 04.07.09 09:21
Guten morgen..
Wie genau setzt man die Zeile denn um?
neues zeichen = als zeichen ( als ASCII Code ( aktuelles zeichen ) +1);?
--- Moderiert von Narses: Beiträge zusammengefasst---
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var text,neuertext,n, laenge:integer; begin Edit1.clear; Edit2.clear; text:=strtoint(edit1.text); for n:=0 to length(edit1.text)-1 do
end;
end. |
weiter als so komm ich gerade nicht.. 
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.07.09 10:25
newbie333 hat folgendes geschrieben : | Wie genau setzt man die Zeile denn um?
neues zeichen = als zeichen ( als ASCII Code ( aktuelles zeichen ) +1);? | jaenicke hat folgendes geschrieben : | Sinspin hat ja Ord bereits genannt, das Gegenstück ist Chr. (Ohne a) |
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 04.07.09 11:17
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Sa 04.07.09 12:28
Also ich habe jetzt mal folgendes geschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.ButtonVerschluesselnClick(Sender: TObject); var i:integer; begin LabelVerschluesselt.Caption:=''; for i:=0 to length(LabelKlartext.Caption)-1 do LabelVerschluesselt.Caption:=LabelVerschluesselt.Caption+Chr(Ord(LabelKlartext.Caption[i])+1); end;
procedure TForm1.ButtonWiederEntschluesselnClick(Sender: TObject); var i:integer; begin LabelWiederEntschluesselt.Caption:=''; for i:=0 to length(LabelVerschluesselt.Caption)-1 do LabelWiederEntschluesselt.Caption:=LabelWiederEntschluesselt.Caption+Chr(Ord(LabelVerschluesselt.Caption[i])-1); Edit1.Text:=LabelWiederEntschluesselt.Caption; end;
procedure TForm1.FormCreate(Sender: TObject); begin LabelKlartext.Caption:='LabelKlartext'; end; |
Dadurch bekomme ich aber folgendes raus:
bei Verschlüsselt: MbcfmLmbsufy
bei wieder entschlüsselt: ÿLabelKlarte
Kann mir das jetzt mal bitte jemand erklären?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.07.09 12:37
Der erste Buchstabe in einem String hat den Index 1...
// EDIT: Tippfehler... 
Zuletzt bearbeitet von jaenicke am Sa 04.07.09 12:42, insgesamt 1-mal bearbeitet
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 04.07.09 12:38
Bedenke bitte, daß es sowas wie Steuerzeichen gibt. Somit kann durch das Verschieben des Zeichens ein Steuerzeichen in den String rutschen. Solange du ganze Bytes verschlüsselst, ist das nicht wild, aber bei reinen Texten kann der Text irreparabel zerstört werden. Mal ein Beispiel:
Delphi-Quelltext 1:
| s := 'abcd' + #0 + 'efghi'; |
Auch wenn der String aus 10 Zeichen besteht, ist beim fünften Zeichen schluß. #0 ist immer Stringende, also wird auch nicht mehr angezeigt.
_________________ Popov
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.07.09 12:40
So lange man nur um eins verschiebt, kommt man aber von den Buchstaben (Asciicode >= 65) kaum auf die Steuerzeichen (Asciicode <= 32).
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 04.07.09 12:41
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.07.09 12:42
Ja, genau das wollte ich damit sagen, aber dann hab ich mich vertippt. 
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 04.07.09 12:45
jaenicke hat folgendes geschrieben : | So lange man nur um eins verschiebt, kommt man aber von den Buchstaben (Asciicode >= 65) kaum auf die Steuerzeichen (Asciicode <= 32). |
In der Regel hast du Recht, aber es gibt auch Sonderzeichen. ÿ ist zB 255, beim Rollen wird daraus #0.
Edit: Nachtrag
@ffgorcky
Beim ShortString wird die 0 Position für die Länge des Strings genutzt. Somit hast du den Wert durch i := 0 mit verarbeitet. Welcher Wert da beim AnsiString steht weiß ich nicht, wahrscheinlich #0, da AnsiString die Länge anders verwaltet.
_________________ Popov
|
|
newbie333 
      
Beiträge: 43
|
Verfasst: Sa 04.07.09 18:09
Vielen Dank @ Popov 
|
|
newbie333 
      
Beiträge: 43
|
Verfasst: So 05.07.09 14:16
Das ist ja jetzt total unsicher..
Kann mir jemand erklären, wie man das ganze jetzt etwas sicherer bekommt?
Also das man zum Beispiel nen Schlüssen eingeben muss..
zb das man die Stelle [n] des verschlüsselten Textes nochmal irgendwie dazwischen macht oder so?
Vielen Dank schonmal!
|
|