Autor Beitrag
Basti
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 345

Windows Vista
D2005 Pers, D7 Pers
BeitragVerfasst: So 12.12.04 19:19 
Hallo Leute,
auch wenn sich das, was jetzt kommt nach Hausaufgaben anhört: Ist es nicht.
Ich will mich mal ein wenig mit Verschlüsselungsmethoden beschäftigen und
habe deshalb mal eine XOR Verschlüsselung programmiert und auch so einige andere Verfahren.
Jedenfalls bin ich jetzt auf eine sehr einfach gestoßten:
Das hebräische Verfahren verschlüsselt Texte, indem ein quadratisches Feld angelegt wird
(Tabelle) und in jede Zeile ein Buchstabe des Textes spaltenweise reingeschrieben wird.
Danach wird der Text Zeilenweise wieder ausgelesen.
Dadurch werden logischerweise die Buchstaben vertauscht und der Text ist unleserlich.

Über die Sicherheit des Verfahrens müssen wir uns nicht unterhalten, aber ich dachte das sei
ganz leicht zu realisieren.
Leider stoße ich auf Probleme, denn eine doppelte Anwendung der Funktion müsste ja wieder
das Original zum Vorschein kommen lassen.
Ist aber leider irgendwie nicht so. :eyes:
Vielleicht habt ihr eine Idee wieso nicht, hier mal die Funktion:

ausblenden volle Höhe Delphi-Quelltext
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:
// hebräische Methode
function hebCryption(text:string):string;
var i,x,y,pos:word;
    Feld: Array of Array of string;
    textlength,feldsize:integer;
begin
  result := '';
  
  // Größe des 2D-Arrays bestimmen & Array voreinstellen
  textlength := length(text);
  feldsize := ceil( sqrt(textlength) );
  setlength(Feld,feldsize);
  for i := 0 to feldsize-1 do
    setlength(Feld[i],feldsize);
  for x := 0 to feldsize-1 do
    for y := 0 to feldsize-1 do
      Feld[x,y] := '';

  // Feld zeilenweise füllen
  x := 0;
  y := 0;
  for i := 1 to textlength do
  begin
    Feld[x,y] := text[i];
    inc(x);
    if x>feldsize-1 then
    begin
      x := 0;
      inc(y);
    end;
  end;

  // Feld spaltenweise auslesen
  for x := 0 to feldsize-1 do
    for y := 0 to feldsize-1 do
    begin
      result := result + Feld[x,y];
    end;
end;


Danke für eure Hilfe :D

_________________
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 12.12.04 23:21 
Hast du beachtet, dass die Länge deines Ausgangsstrings eine Quadratzahl sein muss?

Ansonsten mal folgende Überlegung:

12345678

1 4 7
2 5 8
3 6

14725836

Wenn du jetzt die Zeichen in folgender Reihenfolge ausliest und danach aus dem String löschst, so erhälst du den Ausgangsstring wieder zurück:

1 -> "1" -> 4725836
3 -> "2" -> 475836
5 -> "3" -> 47586
1 -> "4" -> 7586
2 -> "5" -> 786
3 -> "6" -> 78
1 -> "7" -> 8
1 -> "8" -> -

Ich hoffe, du siehst die Methodik der Indizes ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
SadPa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 28

Win 2000; Win XP
D7 Entp
BeitragVerfasst: So 12.12.04 23:29 
Dachte schon du willst die ganze Sache wirklich erstmal auf hebräisch übersetzen :roll: ,... das wär dann aber ne wirklich hervorragende Verschlüsselung! :D :wink:

Schade eigentlich! 8)
Basti Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 345

Windows Vista
D2005 Pers, D7 Pers
BeitragVerfasst: Mo 13.12.04 15:47 
BenBE hat folgendes geschrieben:
Hast du beachtet, dass die Länge deines Ausgangsstrings eine Quadratzahl sein muss?


Nein, es muss keine Quadratzahl sein. Ich kann doch auch Felder leer lassen.
Ändert ja nix an der Ausgabe, wenn ein leerer String hinzugefügt wird.

BenBE hat folgendes geschrieben:
Ansonsten mal folgende Überlegung:
12345678

1 4 7
2 5 8
3 6

14725836


Schau dir mal meinen Code an, der macht genau das.
Ich weiss doch schon, was die hebräische Verschlüsselung ist, habe mich doch belesen. ;)
Ich will ja gar nicht wissen, wie sie funktioniert, sondern, was an meinem Code falsche ist. :cry:

BenBE hat folgendes geschrieben:
Wenn du jetzt die Zeichen in folgender Reihenfolge ausliest und danach aus dem String löschst, so erhälst du den Ausgangsstring wieder zurück:
1 -> "1" -> 4725836
3 -> "2" -> 475836
5 -> "3" -> 47586
1 -> "4" -> 7586
2 -> "5" -> 786
3 -> "6" -> 78
1 -> "7" -> 8
1 -> "8" -> -
Ich hoffe, du siehst die Methodik der Indizes ...


Nein, ich sehe keine Indizes :?
Vielleicht kannst du mir nochmal helfen. :)
Füge mal die Funktion in Delphi ein - ist ja schnell getan.
Für Schreibfaule:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text := hebCryption(Edit1.Text);
  Edit3.Text := hebCryption(Edit2.Text);
end;

Wenn du jetzt zum Beispiel "Hallo" eingibst, spuckt der "Holla" aus. :roll:
Das ist ja das merkürdige...

_________________
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 13.12.04 20:33 
Und zwar kann man meine Art der Dekodierung in Ceil(Wurzel(Länge)) verschiedene Phasen aufteilen, die man folgendermaßen unterteilt:

BenBE hat folgendes geschrieben:
Wenn du jetzt die Zeichen in folgender Reihenfolge ausliest und danach aus dem String löschst, so erhälst du den Ausgangsstring wieder zurück:

1 -> "1" -> 4725836
3 -> "2" -> 475836
5 -> "3" -> 47586
1 -> "4" -> 7586
2 -> "5" -> 786
3 -> "6" -> 78
1 -> "7" -> 8
1 -> "8" -> -

Ich hoffe, du siehst die Methodik der Indizes ...


Dabei bin ich auf folgende Gesetzmäßigkeit getroffen:

Phase 1: 1 + 2 * y
1 -> "1" -> 4725836
3 -> "2" -> 475836
5 -> "3" -> 47586

Phase 2: 1 + 1 * y
1 -> "4" -> 7586
2 -> "5" -> 786
3 -> "6" -> 78

Phase 3: 1 + 0 * y (Oder StringCopy, weil keine weitere Veränderung auftritt)
1 -> "7" -> 8
1 -> "8" -> -

Implementiert werden könnte dies etwa folgendermaßen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
S := Ceil(Sqrt(Length(Text)));

For X := S - 1 downto 1 do
  For Y := 0 to S - 1 do
  Begin
    Result := Result + Text[1 + X * Y];
    Delete(Text, 1 + X * Y, 1);
  end;

Result := Result + Text;

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.