Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigener Verschlüsselungsalgorithmus benutzen (https://www.delphipraxis.net/167829-eigener-verschluesselungsalgorithmus-benutzen.html)

Back2Code 20. Apr 2012 12:34

Delphi-Version: 5

Eigener Verschlüsselungsalgorithmus benutzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Meine Zuordnungstabelle :

Code:
a = 5x0q
b = 9x0w
c = 5x0e
d = 6x0f
e = 5x0r
f = 5x0t
g = 7x0z
h = 5x0u
i = 6x0i
j = 6x0o
k = 0x0p
l = 9x0a
m = 7x0s
n = 5x0d
o = 5x0f
p = 4x0g
q = 4x0h
r = 9x0j
s = 3x0k
t = 7x0l
u = 5x0y
v = 4x0x
w = 7x0c
x = 6x0v
y = 3x0b
z = 6x0n
0 = 0x00
1 = 7x0x
2 = 1x0x
3 = 8x0x
4 = 6x0x
5 = 1x0b
6 = 9x0x
7 = 2x0x
8 = 5x0x
9 = 3x0x
Wollte mich mal an ein Encrypt/Decrypttool ran setzen und hab dafür extra mir ne kleine Zuordnungstabelle ausgedacht. Leider hab ich keinen blassen Schimmer wie ich eine Abfrage gestalte um den eingeben normalen Plaintext dann durch meine Zuordnungstabelle durchzujagen und zu verschlüsseln.

Freue mich über Ideen & Vorschläge.

DeddyH 20. Apr 2012 12:35

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Was für ein Algorithmus? Ich sehe da nur eine Zuordnungstabelle (oder was das auch sein soll).

Back2Code 20. Apr 2012 12:37

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von DeddyH (Beitrag 1162837)
Was für ein Algorithmus? Ich sehe da nur eine Zuordnungstabelle (oder was das auch sein soll).

Dann nennen wir es halt Zuordnungstabelle. Hab ich mir schon fast gedacht, dass du der erste bist leider hast du mir bisher noch nie gut helfen können mit deinen Antworten. Hoffentlich meldet sich noch jemand anderes :stupid:

Bummi 20. Apr 2012 12:41

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Verschlüssel sollte per, ala
Delphi-Quellcode:
for i := 1 to Length(Input) do
Result := Result + GetTrans(Input[i])
kein Problem sein, bei der Umkehr tust Du Dir durch unterschiedlich langen Tokens etwas schwerer.

Allerdings ist der Algorithmus wegen der fehlenden Sicherheit ohnehin zu zum üben geeignet

EDIT:

wenn Dir DeddyH bisher nie helfen konnte, schätze ich dürfte es auch an Dir liegen.
Seine Geduld bringt hier kaum jemand auf ...

mkinzler 20. Apr 2012 12:45

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Hab ich mir schon fast gedacht, dass du der erste bist leider hast du mir bisher noch nie gut helfen können mit deinen Antworten.
Du willst aber schon, dass man dir hilft? :gruebel:

Back2Code 20. Apr 2012 12:48

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von mkinzler (Beitrag 1162842)
Zitat:

Hab ich mir schon fast gedacht, dass du der erste bist leider hast du mir bisher noch nie gut helfen können mit deinen Antworten.
Du willst aber schon, dass man dir hilft? :gruebel:

Natürlich. Ich hab ja nichts gegen ihn :wink: und bei meinen anderen Problemen hat er mir leider nie richtig weiterhelfen können.

DeddyH 20. Apr 2012 12:51

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Kein Problem, dann halte ich mich eben zurück.

p80286 20. Apr 2012 13:04

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Du wirst Dir bei Deiner Zuordnungstabelle schon etwas gedacht haben,
dann kannst Du mir bestimmt erklären warum Du 9 und 1 in den gleichen Wert übersetzt.
Und, daß Dein Eingabetext ohne Satzzeichen und Umlaute auskommt, darf man als bekannt voraussetzen?

Gruß
K-H

Ich sehe gerade, daß ich mich verlesen habe, dann ist das erledigt.

jetzt ist v und 5 gleich, aber das wird sich auch noch ändern.

Klaus01 20. Apr 2012 13:10

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
das v entspricht der 5

Zur Vertiefung der Materie sei noch das Stcihwort: monoalpabetische Verschlüsselung/Substitution genannt.

Grüße
Klaus

Back2Code 20. Apr 2012 13:16

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von p80286 (Beitrag 1162846)
Du wirst Dir bei Deiner Zuordnungstabelle schon etwas gedacht haben,
dann kannst Du mir bestimmt erklären warum Du 9 und 1 in den gleichen Wert übersetzt.
Und, daß Dein Eingabetext ohne Satzzeichen und Umlaute auskommt, darf man als bekannt voraussetzen?

Gruß
K-H

Ich sehe gerade, daß ich mich verlesen habe, dann ist das erledigt.

jetzt ist v und 5 gleich, aber das wird sich auch noch ändern.

Ist jetzt korrigiert ;-) Es geht erstmal nur darum einen ganz normalen Text zu verschlüsseln. "Der Baum" --> 6x0f5x0r9x0j 9x0w5x0q5x0y7x0s

Furtbichler 20. Apr 2012 13:39

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Na dann geh durch den Text durch und ersetze jedes Zeichen durch den entsprechenden Wert aus der Zuordnungstabelle.

Back2Code 20. Apr 2012 13:43

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von Furtbichler (Beitrag 1162850)
Na dann geh durch den Text durch und ersetze jedes Zeichen durch den entsprechenden Wert aus der Zuordnungstabelle.

Die Frage die sich mir dabei stellt ist WIE ich das genau mache :P Die Tabelle als Stringlist anlegen? Und wie soll ich das ganze dann abfragen?

Aphton 20. Apr 2012 13:53

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Du fragst nichts ab, du wendest es an:

Beim Encrypt gehst du alle Zeichen der Zeichenkette durch und fügst an eine neue Zeichenkette immer die zu dem Zeichen zugeordnette Werte. Letztendlich erhältst du somit deinen "verschlüsselten" Code.

Beim Decrypt gehst schaust du zuerst, ob die Länge des Codes ein vielfaches von 4 ist dh 4, 8, 12, 16, 20, ... DA ja jede Substitutionszeichenkette genau 4 Zeichen lang ist. Falls ja, dann gehst du in 4er Schritten den ganzen Code durch und schaust in der Zuordnungstabelle, wofür der Code steht und fügst es an eine neue Zeichenkette hinten zu..

Hausverstand!

Edit: Wie bereits schon angemerkt - monoalphabetische Substitutionsalgorithmen sind imho schnell geknackt.
Ich würd da einfach eine Buchstabenhäufigkeits/Zeichenkettenhäufigkeits - Analyse machen und schauen, mit welcher Sprache es Übereinstimmungen gibt. Dadurch kann ich dann die mir noch leere Zuordnungstabelle ausfüllen...

mkinzler 20. Apr 2012 13:54

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Jedes Zeichen wäre schlecht, da das Abbildungsziel mehr als ein Zeichen ist.
Statt ersetzen Zielstrings an neuen String anhängen.

Back2Code 20. Apr 2012 13:56

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von Aphton (Beitrag 1162856)
Du fragst nichts ab, du wendest es an:

Beim Encrypt gehst du alle Zeichen der Zeichenkette durch und fügst an eine neue Zeichenkette immer die zu dem Zeichen zugeordnette Werte. Letztendlich erhältst du somit deinen "verschlüsselten" Code.

Beim Decrypt gehst schaust du zuerst, ob die Länge des Codes ein vielfaches von 4 ist dh 4, 8, 12, 16, 20, ... DA ja jede Substitutionszeichenkette genau 4 Zeichen lang ist. Falls ja, dann gehst du in 4er Schritten den ganzen Code durch und schaust in der Zuordnungstabelle, wofür der Code steht und fügst es an eine neue Zeichenkette hinten zu..

Hausverstand!

Theorie ist klar, Praxis nicht. Hab noch nicht das nötige Wissen um jetzt einfach los zulegen. Wie gehe ich meine Tabelle durch? Wie speichere ich die Tabelle am besten?

Aphton 20. Apr 2012 14:03

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Das klang aber nicht so.

Außerdem müsstest dann noch präziser werden.
Besser wäre (für mich) diese Formulierung:
~Ich will Methode X durchführen/implementieren, weiß leider nicht, wie ich Punkt 2 realisiere..

Momentan willst du ja, dass man dir alles schön aufm Silbertablett vorserviert (auch wenns nicht der Fall ist, liest sich das so)

Edit:
Die Tabelle, die du einfach als ein 2 dimensionalles Arrays zuerst iwo initialisiert hast, gehste mit einer einfachen Schleife durch - ich überlasse es dir, dich für eine bestimmte zu entscheiden

Klaus01 20. Apr 2012 14:08

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Die Tabelle besteht aus Datensätzen (plainCharacter -> cipherText)
dann bietet sich ein Record an:

Delphi-Quellcode:
TDataSet = record
  plainChar : ansiChar;
  cipherText: ansiString[4];
end;
Da Du eine bestimmet Anzahl an Zeichen hast, kannst Du diese in einem Array halten.

Delphi-Quellcode:
TZuordnungstabelle = Array[0..35] of TDataSet;
Speichern durch das Array iterieren und jeden Datensatz in eine Datei/TFileStream schreiben.
Auslesen geht es dann umgekehrt.

Grüße
Klaus

simmi 20. Apr 2012 14:18

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Hallo,

ich fand die Überschrift recht interessant, kann aber gar keine Verschlüsselung erkennen. Es handelt sich doch nur um den Austausch eines Zeichens durch eine genau definierte Zeichenkette. Heißt bei genug Text kann man die Struktur erkennen und relativ schnell die Bedeutung zusammen sortieren.

Aber viel leicht ist es ja auch nur eine Übung.

Eine Hilfe für die Umsetzung findest Du http://www.delphi-treff.de/tutorials...ng/ueberblick/ hier. Schaue auch mal in Deine Hilfe, dort gibt es für einfache Schleifenanweisungen auch Beispiele.

Back2Code 20. Apr 2012 14:26

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Danke für die vielen Antworten. Ich werde mir wohl erstmals Records anschauen müssen denn damit hab ich noch gar nichts gemacht.

Ja es ist eine Übung für mich :-)

Klaus01 20. Apr 2012 14:27

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von simmi (Beitrag 1162867)
...

ich fand die Überschrift recht interessant, kann aber gar keine Verschlüsselung erkennen. Es handelt sich doch nur um den Austausch eines Zeichens durch eine genau definierte Zeichenkette.

Auch der Austausch von Zeichen durch andere ist eine Verschlüsselung (siehe Caesar-Verschlüsselung).
Wenn auch eine sehr schwache..

Grüße
Klaus

Back2Code 20. Apr 2012 14:31

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Bits jemand von euch hier der mir sagen könnte wie sicher ungefähr meine Tabelle ist?

Bummi 20. Apr 2012 14:33

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
http://de.wikipedia.org/wiki/Caesar-...und_Sicherheit

Back2Code 20. Apr 2012 14:41

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von Bummi (Beitrag 1162871)

Meine hat ja nichts mit Caesar zu tun :p Ist anderst aufgebaut.

Medium 20. Apr 2012 14:46

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Es ist ein simples Substitutionsverfahren wie Caesar, nur dass du nicht rotiertst, sondern "gemischt" ersetzt. Das ändert nur nichts daran, dass man mit einer Häufigkeitsverteilung genau so leicht da dran gehen kann, weil eben ein Zeichen immer durch genau ein/e andere/s (Folge) ersetzt wird. So lange du eine 1<->1 Beziehung hast wird das auch so bleiben, völlig egal was du für Werte nun in deine Tabelle schreibst.

Klaus01 20. Apr 2012 14:52

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von Robin2k (Beitrag 1162875)
Zitat:

Zitat von Bummi (Beitrag 1162871)

Meine hat ja nichts mit Caesar zu tun :p Ist anderst aufgebaut.

Wie kommst Du denn auf dieses schmale Brett?

Du ersetzt ein Zeichen durch vier Zeichen, dadurch erhöht sich die Sicherheit aber nicht.
Deine 4 Zeichen repräsentieren auch nur ein Informations-Token.

Deine Verschlüsselung ist auch nur eine monoalphabetische Verschlüsselung.

Caesar:
Code:
Beispiel für eine Verschiebung um drei Zeichen:

Klar:   a    b     c   d e f g h i j k l m n o p q r s t u v w x y z
Geheim: D    E     F   G H I J K L M N O P Q R S T U V W X Y Z A B C

Deine   0x1z 0x2y  0x3x ...
Grüße
Klaus

shmia 20. Apr 2012 16:25

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Stell' Dir vor ein Angreifer bekommt den verschlüsselten Text und den Klartext gleichzeitig in die Finger (weil er mit deiner Sekretärin gepimpert hat :-) ).
Blöderweise war die Nachricht auch noch recht lang, so dass alle Buchstaben verwendet wurden.
Ausserdem kennt er auch noch Algorithmus.

Ein gutes Verschlüsselungsverfahren ist nun so konstruiert, dass der Angreifer daraus den Schlüssel (deine Zuordnungstabelle) nicht zurückrechnen kann.

Selbst wenn man den Schlüssel für folgende Nachrichten ändert, weiss der Angreifer bei einer Zuordnungstabelle doch genug (Häufigkeitsverteilung der Buchstaben, Wörterbuchattacke,...) um die Nachricht zu entschlüsseln.

Assarbad 20. Apr 2012 18:25

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Andreas (shmia) erklärt es am besten. Das ist vermutlich auch, warum viele die Caesar-Verschlüsselung nicht als Verschlüsselung ansehen. Nach heutigen Maßstäben (Rechenkapazität und Speicher, sowie Internet) ist das ein Klacks.

Wenn die benutzte (natürliche) Sprache bekannt ist, wird es aufgrund der statistischen Buchstabenverteilung noch einfacher einen Angriff zu fahren. Sprich: mit roher Gewalt ("brute force") die Zuordnung zu knacken.

Zitat:

Zitat von Robin2k (Beitrag 1162843)
Natürlich. Ich hab ja nichts gegen ihn :wink: und bei meinen anderen Problemen hat er mir leider nie richtig weiterhelfen können.

Das klingt aber schon anders. Er ist einer der kompetenten Forenten, einer der dir geantwortet und damit einen (wenn auch kleinen) Teil seiner Lebenszeit geschenkt hat. Und darauf so eine Replik? Es gibt aus den 14 Jahren Forenerfahrung die ich insgesamt habe nur weniges was ähnlich krass war.

Abgesehen davon hat DeddyH recht. Du hast einfach eine Zuordnungstabelle - also Daten - in deine Frage geschrieben und dann eine leicht wirre ("wie ich eine Abfrage gestalte"?) Frage geschrieben für die es bei StackOverflow Downvotes gehagelt hätte. Dann macht sich DeddyH die Mühe und antwortet dir und bekommt dafür sowas an den Kopf gehauen:

Zitat:

Zitat von Robin2k (Beitrag 1162838)
Hab ich mir schon fast gedacht, dass du der erste bist leider hast du mir bisher noch nie gut helfen können mit deinen Antworten. Hoffentlich meldet sich noch jemand anderes :stupid:

Ist das dein Ernst?

*fast sprachlos* :?

himitsu 20. Apr 2012 18:56

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

Zitat von Klaus01 (Beitrag 1162869)
Auch der Austausch von Zeichen durch andere ist eine Verschlüsselung (siehe Caesar-Verschlüsselung).
Wenn auch eine sehr schwache..

Wenn man es genau sieht, dann ist selbst XOR nur eine Zeichenaustauschverschlüsselung.
Nimm mal einen Schlüssel von einem Zeichen Länge und schon hast du eine 1:1-Beziehug zwischen Eingangs- und Ausgangszeichen, also ebenfalls quasi eine Tabelle, für die Umrechnung.

Und was das Sicher betrifft.
Wenn man die Schlüssellänge entsprechend vergrößert, dann wird es irgendwann extrem sicher ... da kann man selbst mit Bruteforce und statistischen Verteilungen rein garnichts mehr anfangen (vorallem wenn es sich um ein OTP handelt).

Zitat:

*fast sprachlos*
*schweig*

simmi 20. Apr 2012 19:34

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Zitat:

@Klaus01 - Auch der Austausch von Zeichen durch andere ist eine Verschlüsselung
mag sein das es für das Altertum ausreichend war...
Zitat:

@Assarbad - *fast sprachlos*
DeddyH hat für mich immer eine gute Idee gehabt und auch seine anderen Antworten in Beiträgen die ich gelesen habe waren immer top und verständlich!. Schade dass Du so denkst.

Sir Rufo 20. Apr 2012 21:03

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Ungeachtet der Sicherheit bei diesem Verfahren kann es so umgesetzt werden:

Deine Zuordnungstabelle in eine Stringlist packen (entferne die Leerzeiche vor und nach dem = und dann der Eigenschaft Text zuweisen).
Der Rest ist ... sieh selbst
Delphi-Quellcode:
var
  KeyList : TStringList;

KeyList.Text := 'a = 5x0q' + sLineBreak +
'b = 9x0w' + sLineBreak +
...
'9*= 3x0x';

function Crypt( const aStr : string; const Key : TStrings ) : string;
var
  idx : integer;
begin
  Result := '';
  for idx := 1 to Length( aStr ) do
    Result := Result + Key.Values[ aStr[ idx ] ];
end;

function Decrypt( const aStr : string; const Key : TStrings ) : string;
var
  idx : integer;
  part : string;
begin
  Result := '';
  for idx := 0 to aStr div 4 - 1 do
  begin
    part := copy( aStr, idx * 4 + 1, 4 );
    Result := Result + Key.Names[ Key.IndexOfName( part ) ];
  end;
end;

isilive 26. Apr 2012 00:16

AW: Eigener Verschlüsselungsalgorithmus benutzen
 
Falls du es selbst erstellen willst:

Fange ganz einfach an:

- Nimm zwei Edit's statt zwei Memo's. Dann brauchst du nur mit Strings zu arbeiten, statt mit Stringlists.

- Schreibe eine Schleife die Zeichen für Zeichen vom Quelltext durchgeht, und schaue, dass das korrekt und sauber läuft.

- Als nächstes soll sie dieses Zeichen irgendwie verändern. zB: +3 rechnen (das wäre dann die orginale Cäsar"verschlüsselung". Das andere nennt sich übrigens nicht Cäsar sondern monoalphabetische Substitution).

- Und dann erst fängst du an die Zeichen durch bestimmte andere zu ersetzen. Das kannst du mit Records machen. Ich würds aber mit einem Array machen, dessen Index vom Quelltextbuchstaben abhängt. Der liefert aber nur einen Buchstaben. Und wie setz ich jetzt die Buchstaben wieder zusammen? Fragen über Fragen :P

- Und wenn du dann deine 4 Chars pro Quelltextbuchstabe haben willst, dann kannst du stattdessen einfach ein Array of String nehmen.

- Und wenn du willst kannst du dann mit Memos und Stringlisten arbeiten. Damit arbeitest du dann automatisch mit sowas ähnlichem wie Array of Strings.

Du solltest dir vielleicht angewöhnen zur Lösung einer Aufgabe nicht zuerst das GUI zu erstellen, sondern dich hinzusetzen und zu überlegen WIE kann ich das programmieren mit den Befehlen die mir zur Verfügung stehen (Stichwort Algorithmus). Manchmal schreib ich 2 Zettel voll bevor ich das erste mal die Tastatur berühre :stupid:

Rufo's Code ist sicher sehr gut, aber eine von tausend Möglichkeiten das zu machen... Wenn du es selbst Schritt für Schritt programmierst lernst du am meisten und entwickelst deinen eigenen Stil.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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