AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi ganz einfache Verschlüsselung von einem Memo Text
Thema durchsuchen
Ansicht
Themen-Optionen

ganz einfache Verschlüsselung von einem Memo Text

Ein Thema von Penelopee · begonnen am 19. Nov 2005 · letzter Beitrag vom 14. Dez 2005
Antwort Antwort
Seite 2 von 3     12 3      
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#11

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 19. Nov 2005, 18:46
@3/8: das ist aber keine Cäsar-Verschlüsselung.

@penelopee: was funktioniert nicht? bei mir geht das Super...
Angehängte Dateien
Dateityp: rar caesar_119.rar (173,8 KB, 29x aufgerufen)
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 19. Nov 2005, 18:47
@ichbins: Das zweite schon. Also aus 'abcde' wird 'bcdef'. Das ist doch eine Cäsar-Verschlüsselung, oder? (Mir persönlich wäre das etwas zu einfach zu knacken.)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 19. Nov 2005, 18:50
Hallo Penelopee,

das mit der Caesar-Chiffre ist nicht so einfach. Das Original hatte ein Standardalphabet von nur 20 Buchstaben und keine Großschrift. Eigentlich reden wir von der einfachen monozyklischen Substitution, für die Caesars Chiffre lediglich ein früher historischer Beleg ist. Julius hat das auch nicht selbst erfunden, sondern bei Sueton geklaut, aber ist schon verjährt. Hier hast du ein bischen Code:

Delphi-Quellcode:
function Cypher(const s: string; power: integer): string;
var
  i: integer;
begin
  Result := s;
  if power < 0 then
    power := (power + 224 * Succ((power div -224))) mod 224;
  if power > 0 then
    for i := 1 to Length(s) do
      if s[i] > #31 then
        Result[i] := Chr((Ord(s[i]) - 32 + power) mod 224 + 32)
end;
Testen kannst du mit zwei Buttons und einem Memo:

Delphi-Quellcode:
const
  PowerOfCesar = 3;

procedure TDemoForm.btnEncodeClick(Sender: TObject);
begin
  Memo.Lines.Text := Cypher(Memo.Lines.Text, PowerOfCesar);
end;

procedure TDemoForm.btnDecodeClick(Sender: TObject);
begin
  Memo.Lines.Text := Cypher(Memo.Lines.Text, - PowerOfCesar);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Penelopee

Registriert seit: 7. Okt 2005
69 Beiträge
 
#14

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 19. Nov 2005, 20:37
kann mir mal bitte einer diesen Quellcode erklären:
Delphi-Quellcode:
procedure encode(key:integer);
var
  i,j,k,pos:integer;
  s:string;
  done:tpoint;
const
letters:string='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ßöäüÖÄÜ,.;-_+*~#''?\=}][{&%$³²$§"°^<>|µ€@';
begin
for i:=0 to form1.memo1.lines.Count do
      for j:=1 to length(form1.memo1.lines.Strings[i]) do
      for k:=1 to length(letters) do
        if byte(form1.memo1.lines.Strings[i][j])=byte(letters[k]) then
        begin
          if not ((done.x=i) and (done.y=j)) then
          begin
            pos:=k+key;
            while pos>length(letters) do
              pos:=pos-length(letters);
            while pos<1 do
              pos:=pos+length(letters);
            s:=form1.memo1.lines.strings[i];
            s[j]:=letters[pos];
            form1.memo1.lines.Strings[i]:=s;
            done.X:=i;
            done.Y:=j;
          end;
        end;
Also meine fragen:bei Count werden die Buchstaben gezählt oder??Und was macht "length"??
Was macht der Befehl "done.X:=i;"???

Vielen Dank!!
  Mit Zitat antworten Zitat
Penelopee

Registriert seit: 7. Okt 2005
69 Beiträge
 
#15

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 20. Nov 2005, 13:46
Jetzt funktioniert es!!
Aber wie baue ich Leerzeichen ein???Wenn ich einen Text decode , soll zwischen den Worten Leerzeichen sein!!
Delphi-Quellcode:
const
Key = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ';


implementation
{$R *.dfm}

function Verschluessle(Text: String) : String;



begin

for i := 1 to length(Text) do begin

for j := 1 to 64 do begin

if Text[i] = Key[j] then

Result := Result+Key[j+x];

end;
end;
end;




function Entschluessle(Text: String) : String;

begin

for i := 1 to length(Text) do begin

for j := 1 to 64 do begin

if Text[i] = Key[j] then

Result := Result+Key[j-x];

end;
end;
end;




procedure TForm1.BverschluesselnClick(Sender: TObject);
begin
Memo1.Lines.Text := Verschluessle(Memo1.Lines.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
x:=5;
end;

procedure TForm1.BentschluesselnClick(Sender: TObject);
begin
Memo1.Lines.Text := Entschluessle(Memo1.Lines.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile('Text.txt');
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#16

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 20. Nov 2005, 14:10
Zitat von Penelopee:
Jet...soll zwischen den Worten Leerzeichen sein!! ...
Das ist keine gute Idee! Wenn ich weiss wo ein Wort anfängt und wieder aufhört hat man mit etwas glück deinen "Cäsar" schnell geknackt.

BTW: Du solltest deinen Sourcecode "besser" formatieren. So wie er ist, ist er recht schlecht zu lesen


EDIT

Und noch etwas.

Überlege mal was in dieser Zeile passiert
Result := Result+Key[j+x]; wenn: (j + x) > als Length(Key) ist.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 20. Nov 2005, 14:26
Hi Sharky,

ob mit oder ohne white space - bei der monozyklischen Substitution wird die Hürde für eine erfolgreiche Dechiffrierung nicht wesentlich erhöht:

Delphi-Quellcode:
function Cypher(const s: string; power: integer): string;
var
  i: integer;
begin
  Result := s;
  if power < 0 then
    power := (power + 223 * Succ((power div -223))) mod 223;
  if power > 0 then
    for i := 1 to Length(s) do
      if s[i] > #32 then
        Result[i] := Chr((Ord(s[i]) - 33 + power) mod 223 + 33)
end;
Auch unter einfachsten Randbedingungen sollte man mindestens eine polyzyklische Variante verwenden und Korrekturmaßnahmen zur Verschleierung der Häufigkeitsverteilung ergreifen. Und bei der heutigen Rechenleistung reden wir dann immer noch über Kinderkram...

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von St.Pauli
St.Pauli

Registriert seit: 26. Dez 2004
351 Beiträge
 
Delphi 7 Personal
 
#18

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 20. Nov 2005, 15:11
Zitat von Sharky:
Überlege mal was in dieser Zeile passiert
Result := Result+Key[j+x]; wenn: (j + x) > als Length(Key) ist.
Das ist das eine...

Delphi-Quellcode:
letters:string='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ßöäüÖÄÜ';
//diese Buchstabenliste kann beliebig erweitert werden.
Das Problem ist, dass z mit A verschlüsselt wird, aber nach Caesar mit a ersetzt werden müsste. Z wird zu 1, sollte aber A werden und Ü wird, wie du gesagt hast, ja einen Fehler ergeben.

Zitat von marabu:
Ich bin sicher, dass ein nicht-wissenschaftlicher Umgang mit diesem Thema hier angebracht ist, aber auch da liebe ich Genauigkeit. Die Substitution von z mit A hat nicht viel mit der Verschlüsselung nach Caesar gemein. Das damalige Standardalphabet umfasste 20 Lettern, Groß oder Kleinschrift und auch white space waren kein Thema und Ziffern waren im Zeichenvorrat bereits eingeschlossen. Jede moderne Adaption des historisch belegten Verfahrens verdient eigentlich den Namen nicht mehr. Die im Zitat geforderte Verschlüsselung ist trivial polyzyklisch (3 Ringe), arbeitet aber mit der Potenz 1, die von Augustus, dem Erben des Gaius Julius verwendet wurde. Prof. Bauer mutmaßte, dass jener nicht bis 3 zählen konnte - 3 war die von Gaius Julius bevorzugte Potenz.
Zitat von marabu:
Auch unter einfachsten Randbedingungen sollte man mindestens eine polyzyklische Variante verwenden und Korrekturmaßnahmen zur Verschleierung der Häufigkeitsverteilung ergreifen. Und bei der heutigen Rechenleistung reden wir dann immer noch über Kinderkram.
Das stimmt, aber ich glaube nicht, dass jemand seine Bankdaten mit Caesar verschlüsseln will, sondern das solche Verschlüsselungen immer nur als kleine Spielereien genutzt werden.
Und zu den Korrekturmaßnamen würde ich mal homophone Substitution vorschlagen, was natürlich auch nicht zum Verschlüsseln von Bankdaten einlädt, aber im Gegensatz zu der Caesar-Chiffre doch dem Angreifer eine Hürden in den Weg legt.
Gruß St.Pauli
  Mit Zitat antworten Zitat
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#19

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 20. Nov 2005, 15:28
Hallo,

Da mich das jetzt doch brennend interessiert hat, hab ich jetzt meine Version nochmals überarbeitet und einige Kleingkeiten, die in diesem Thread angesprochen wurden beseitigt.


Delphi-Quellcode:
function Verschluessle(Text: String) : String;

var
 Key: array[1..3] of String = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz', '0123456789');

{ ... }

function Verschluessle(Text: String) : String;
var i, j, k: Integer;
begin
 Result := ''; //Ergebniss zurücksetzen

 for i := 1 to length(Text) do //Jeden Buchstaben des Textes durchgehen
 begin
   for j := 1 to 3 do //Jeden Schlüssel durchgehen
   begin
     for k := 1 to length(Key[j]) do
     begin
       if Text[i] = Key[j][k] then
       begin
         if not (k+1 > length(Key[j])) then //Überprüfen ob man schon ebim letzten Buchstaben ist
          Result := Result + Key[j][k+1]
         else
          Result := Result + Key[j][1];
       end;
     end;
   end;
   if Text[i] = ' then //If Bedingung weglassen wenn man keine Leerstellen will.
    Result := Result + ' ';
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.Text := Verschluessle(Memo1.Lines.Text); //Möglicher aufruf der Funktion
end;
Gelöst hab ich das mit dem z zu A, Z zu 1, das ich 3 unterschiedliche Schlüssel nehme, bzw. für jede Gruppe ein eigenen.
Und wenn man am Ende vom der "Schlüsselgruppe" ankommt wird man einfacher wieder nach vorne gesetzt. (Stichwort: If-Abfrage)

[Edit1] Hups kleiner Denkfehler drin. Das mit den Leerstellen muss ich doch jetzt nocheinmal testen ..
[Edit2] So nun bleiben die Leerstellen erhalten ...

MFG
Maximus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: ganz einfache Verschlüsselung von einem Memo Text

  Alt 20. Nov 2005, 17:11
Hallo St. Pauli,

Zitat von St.Pauli:
Das Problem ist, dass z mit A verschlüsselt wird, aber nach Caesar mit a ersetzt werden müsste. Z wird zu 1, sollte aber A werden und Ü wird, wie du gesagt hast, ja einen Fehler ergeben.
das ist nicht nach Caesar. Ich bin sicher, dass ein nicht-wissenschaftlicher Umgang mit diesem Thema hier angebracht ist, aber auch da liebe ich Genauigkeit. Die Substitution von z mit A hat nicht viel mit der Verschlüsselung nach Caesar gemein. Das damalige Standardalphabet umfasste 20 Lettern, Groß oder Kleinschrift und auch white space waren kein Thema und Ziffern waren im Zeichenvorrat bereits eingeschlossen. Jede moderne Adaption des historisch belegten Verfahrens verdient eigentlich den Namen nicht mehr. Die im Zitat geforderte Verschlüsselung ist trivial polyzyklisch (3 Ringe), arbeitet aber mit der Potenz 1, die von Augustus, dem Erben des Gaius Julius verwendet wurde. Prof. Bauer mutmaßte, dass jener nicht bis 3 zählen konnte - 3 war die von Gaius Julius bevorzugte Potenz.

Zitat von St.Pauli:
Und zu den Korrekturmaßnamen würde ich mal homophone Substitution vorschlagen
Nur Interesse halber - steht sowas bei Wikipedia oder hast du Kenntnisse in Linguistik und Kryptologie? Homophonie ist zwar ein anerkanntes Verfahren zur Behinderung der stochastischen Analyse, beisst sich aber regelmäßig mit der rein funktionalen und damit deterministischen Implementierung des Verfahrens.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz