AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Buchstaben sortieren aus einem Memofeld

Ein Thema von Fussel9 · begonnen am 24. Aug 2009 · letzter Beitrag vom 27. Aug 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.994 Beiträge
 
Delphi 12 Athens
 
#11

Re: Buchstaben sortieren aus einem Memofeld

  Alt 26. Aug 2009, 22:47
Irgendwie habe ich Schwierigkeiten, deine Problemstellung zu verstehen.

Ausgehend von deinem Beispiel
Zitat:
Eine Ente geht spatzieren. <----------> aEeEeeeeghiinnnprstttz
ist doch die einfachste, sparsamste und schnellste Möglichkeit den Originalzustand wieder herzustellen, einfach den Originaltext zu speichern. Und das Sortieren eines Strings mit oder ohne Beachtung der Groß/Kleinschreibung sollte nun wirklich kein Problem sein.

Ich vermute, ich habe das große Ganze noch nicht erfasst.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Buchstaben sortieren aus einem Memofeld

  Alt 26. Aug 2009, 23:03
Ich möchte gern, dass mein Programm einen Text nimmt und ihn unlesbar macht...

niemand weiß was aEEeeeeeghiinnnprstttz heißt daher soll der Text in dieser Form gespeichert werden.

Damit man den Text rekonstruieren kann muss natürlich auch die Position jedes Buchstabens und jedes Leerzeichens...Satzzeichens allgemein gespeichert werden...

hast du nun verstanden?

Text rein--> Sinnlos raus

die speicherung soll dann in ner ini oder was weiß ich vorgenommen werden aber das ist ja neben sächlich...(der sinnlose Text z.B. in ner txt und die zahlen in ner ini oder nem eigenen format...)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#13

Re: Buchstaben sortieren aus einem Memofeld

  Alt 26. Aug 2009, 23:32
Andere Lösung:
Wende z.b. Bubblesort auf den String an und merke dir in der Tauschen-Prozedur die Vertauschungen ... wenn du diese dann rückwärts durchführst, solltest du den ursprünglichen String erhalten.

Wenn du es so machst, könntest du denn String aber auch zufällig verwirbeln:
Delphi-Quellcode:
function Wirbel(x: String): String;
var i: integer;

  procedure tausche(a, b: integer);
  var temp: char;
  begin
    temp := result[a];
    result[a] := result[b];
    result[b] := temp;
    merke(a, b);
  end;

begin
  if length(x) > 1 then
  begin
    result := x;
    for i := 1 to length(x) do tausche(i, random(length(x))+1);
  end;
end;
Das würde mit weniger Vertauschungen als z.B. Bubblesort auskommen (randomize nicht vergessen).

MfG,
Bug

PS: Es ist natürlich klar, dass das alles keine Verschlüsselung ist, sondern eher eine "Verschlüsselung"
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Buchstaben sortieren aus einem Memofeld

  Alt 27. Aug 2009, 05:38
Für die Verschlüsselung gibt es eh besser Methoden (§DES, AES, ...) schau dir mal DEC an.
Markus Kinzler
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Buchstaben sortieren aus einem Memofeld

  Alt 27. Aug 2009, 06:11
Da es scheinbar nicht zwingend darum geht, ein Memofeld zu sortieren, sondern einen Eintrag in der INI-Datei zu verstecken...

MKinzler hat es schon geschrieben, dass es dafür fertige Verschlüsselungsverfahren gibt. Um INI-Einträge vor "normalen" neugierigen Benutzern zu schützen, hatte ich schon länger eine einfachen 8-Bit Verschlüsselung gebastelt. Dies ist natürlich überhaupt nicht sicher, gegen erfahrene Angriffe. Aber schützt wirksam vor neugierigen Otto-Normal-PC-Anwendern

Der übergebene String kann auch Memo.Text sein, da Sonderzeichen wie Linefeed, Tab oder Return kein Problem sind. Der "verschlüsselte" Text wird als Hex-String ausgegeben, damit ein speichern in einer INI-Datei kein Problem ist.

Delphi-Quellcode:
function StrToCryptHex(Text: String; XorVal : Byte): String;
var
  i, Count : Integer;
  b : Byte;
begin
  Count := Length(Text);
  Result := '';
  for i := 1 to Count do begin
    b := Ord(Text[i]);
    XorVal := b XOR XorVal;
    Result := Result + IntToHex(XorVal, 2);
  end;
end;

function CryptHexToStr(Text: String; XorVal : Byte): String;
var
  i, Count : Integer;
  b : Byte;
begin
  Count := Length(Text) div 2;
  Result := '';
  for i := 0 to Count-1 do begin
    b := StrToInt('$'+Copy(Text, i*2+1, 2));
    XorVal := b XOR XorVal;
    Result := Result + Chr(XorVal);
    XorVal := b;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  XorVal = $AA; // beliebiger Bytewert
var
  AString : String;
begin
  AString := 'Dieser Text wird für normale PC-Anwender versteckt.';
  // Testanzeige
  ListBox1.Items.Add(AString);
  // "Verschlüsseln"
  AString := StrToCryptHex(AString, $AA);
  // Ergebnis
  ListBox1.Items.Add(AString);
  // "Entschlüsseln"
  AString := CryptHexToStr(AString, $AA);
  // Ursprung wieder hergestellt
  ListBox1.Items.Add(AString);
end;
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#16

Re: Buchstaben sortieren aus einem Memofeld

  Alt 27. Aug 2009, 10:06
Zitat von Fussel9:
Ich möchte gern, dass mein Programm einen Text nimmt und ihn unlesbar macht...

niemand weiß was aEEeeeeeghiinnnprstttz heißt daher soll der Text in dieser Form gespeichert werden.

Damit man den Text rekonstruieren kann muss natürlich auch die Position jedes Buchstabens und jedes Leerzeichens...Satzzeichens allgemein gespeichert werden...

hast du nun verstanden?

Text rein--> Sinnlos raus

die speicherung soll dann in ner ini oder was weiß ich vorgenommen werden aber das ist ja neben sächlich...(der sinnlose Text z.B. in ner txt und die zahlen in ner ini oder nem eigenen format...)
Dann musst du aber zu jedem Buchstaben auch die Position speichern Und da würde ich dir wie mkinzler schon gesagt hat, zu "echten" Verschlüsslungen greifen. Nicht nur weil sie sicherer sind, sondern weil du dir keinen Kopf um das "wie" machst. Du "jagst" es nur durch eine Prozedur die es dir Verschlüsselt und fertig. Nagut fürs erste mal muss man sich reinfuchsen. Aber ich verwende Rijndael in einem Programm um die Namen zu verschlüsseln und ich bin sehr froh das so gemacht zu haben Weil ich habe mir eine lange Zeit den Kopf zermatert wie ich das hinkriege, aber dann stand das Testprogramm und dass musste dann nur noch in das Original emigriert werden. Außerdem hatte ich nur so lange gebraucht, um das "sinnvoll" einzubauen, da ich nur Teile verschlüssele.

Übrigens meint mkinzler mit §DES nur 3DES
Also ich würde Twofish oder AES verwenden, weil sie sicher und schnell sind. Ich mein, warum auf Sicherheit verzichten, wenn es nur etwas anders ist

Delphi-Quellcode:
function Verschluesseln(AKlartext : string; ACipher : TDECCipher) : string;
begin
  Result := ACipher.EncodeBinary(AKlartext, TFormat_HEXL);
  ACipher.Done;
end;

function Go : string;
const
  SRC = '....// Dein Klartext
var
  C : TDECChipher;
begin
  C := TCipher_Rijndael.Create;
  try
    C.Mode := cmCTSx;
    Result := Verschluesseln(SRC, C);
  finally
    C.Free;
  end;
end;
MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Buchstaben sortieren aus einem Memofeld

  Alt 27. Aug 2009, 21:03
Das is alles wunderbar, aber beantwortet nicht meine frage, ich danke euch mal für die vielen posts, doch ich wollte eigentlich meine idee eines Schlüssel-Schloss prinzips durchbringen...

Also nochmal...
Muss ich alle Zeichen einzeln überprüfen lassen oder gibt es eine Zeichen Bibliothek in delphi...

mfg
der Fussel
  Mit Zitat antworten Zitat
Draos

Registriert seit: 12. Aug 2008
42 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Buchstaben sortieren aus einem Memofeld

  Alt 27. Aug 2009, 21:24
Delphialphabet ist mir nicht bekannt.

Aber es gibt LowerCase() und UpperCase() und die Funktion Chr() und eine Ansii-Tabelle. Damit kannste locker eine Schleifefühlen und brauchst nur nach z.B. checken ob:

if LowerCase(Text[i])=AlphaBet[j] then Mal ein Beispiel. Eine--->eEin.
Ne Idee wäre, dass Speichern der genauen Position nur des 1. Zeichens und danach den Positionsunterschied. Nach dem Beispiel:
2=>1=>1=>-3
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#19

Re: Buchstaben sortieren aus einem Memofeld

  Alt 27. Aug 2009, 21:50
Hallo Fussel,

so meinte ich das in meinem Beitrag #9:

Delphi-Quellcode:
var
  SL: TStringList;
  InputText: string;
  OutputText: string;
  i: Integer;
begin
  SL := TStringList.Create;
  try
    InputText := MemoInput.Text;

    // Buchstaben und zugehörige Positionen in der Stringliste ablegen
    // (die Positionen werden in SL.Objects[] gespeichert)
    for i := 1 to Length(InputText) do
      SL.AddObject (InputText[i], Pointer(i));

    // Stringliste nach den Buchstaben sortieren
    SL.Sort;

    // Ausgabetext dimensionieren
    SetLength (OutputText, SL.Count);

    // Zeichen für Zeichen aus der Stringliste holen und über die
    // gespeicherte Position in den Ausgabestring einsetzen
    for i := 0 to SL.Count - 1 do
      OutputText[Integer(SL.Objects[i])] := SL[i][1];

    ShowMessage (OutputText);
  finally
    SL.Free;
  end;
end;
Die Kommentare sollten dir helfen, den Quelltext zu verstehen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:35 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