Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Codieren mit Passwort (https://www.delphipraxis.net/154028-codieren-mit-passwort.html)

himitsu 25. Aug 2010 15:49

AW: Codieren mit Passwort
 
Zitat:

Zitat von Matze33 (Beitrag 1044919)
Also wie gesagt: Mein Lehrer meinte, wir sollen das eigentliche Geschehen in einem Array of byte(s?) stattfinden lassen, weil das damit umgehen kann im Gegensatz zum Memo.

Wie gesagt: Ob String oder Array of Byte ist egal, da Beises damit umgehen kann.
Selbst wenn du ein Byte-Array nimmst, wird es Probleme geben, sobald du das Ergebnis z.B. in einem Memo anzeigen willst.

p80286 25. Aug 2010 17:01

AW: Codieren mit Passwort
 
Wie wäre es denn mit einer modifizierten Darstellung?
etwa so:
Delphi-Quellcode:
AusString:='';
for i:=0 to mIndex do
  if BSTBbarray[i]<32 then AusString:=Ausstring+'.'
  else begin
    if BSTBarray[i]<128 then AusString:=Ausstring+char(BSTBarray[i])
    else AusString:=Ausstring+'.';
  end;
Man kann das Ersetzen natürlich auch auf die "bösen" Zeichen beschränken (#0,#9,#10,#13.....)

Gruß
K-H

himitsu 25. Aug 2010 17:23

AW: Codieren mit Passwort
 
Zitat:

Zitat von p80286 (Beitrag 1044976)
Wie wäre es denn mit einer modifizierten Darstellung?

Für eine "reine" Anzeige isses OK (hab weiter oben auch schon eine Variante davon gezeigt).
Aber wenn man nun diesen "angezeigten" Text versucht zurückzucodieren, dann geht das natürlich nicht, da man hierfür den "unveränderten" Text benötigt.

Matze33 27. Aug 2010 08:27

AW: Codieren mit Passwort
 
Haben eben weiter gemacht in Informatik und neue Methoden kennen gelernt. Dadurch arbeite ich jetzt mit einem dynamischen Array of byte und muss dementsprechend auch mit Pointern umgehen.
Ich hab aber immer noch einen Fehler drin. Kann mir jemand das wirklich so verbessern, dass es bei diesen Wegen bleibt?
Ich bin euch zwar dankbar für die Vorschläge, aber bitte bedenkt, dass ich noch nicht so viel Ahnung habe und macht es dementsprechend bitte auf einem einfach Level :P

Hier noch mal mein aktualler Code

Delphi-Quellcode:
unit U_Codieren2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Neu1: TMenuItem;
    ffnen1: TMenuItem;
    Speicherals1: TMenuItem;
    Schlieen1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Hilfe1: TMenuItem;
    Info1: TMenuItem;
    Btn_Codieren: TBitBtn;
    E_Passwort: TLabeledEdit;
    procedure Schlieen1Click(Sender: TObject);
    procedure Neu1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ffnen1Click(Sender: TObject);
    procedure Speicherals1Click(Sender: TObject);
    procedure Info1Click(Sender: TObject);
    procedure Btn_CodierenClick(Sender: TObject);
  private
  Speicher:Array of byte;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Schlieen1Click(Sender: TObject);
begin
 close;
end;

procedure TForm1.Neu1Click(Sender: TObject);
begin
  Memo1.Clear;
  E_Passwort.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
  E_Passwort.Clear;
end;

procedure TForm1.ffnen1Click(Sender: TObject);
begin
  if(OpenDialog1.Execute) then Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm1.Speicherals1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.Info1Click(Sender: TObject);
begin
  //
end;

procedure TForm1.Btn_CodierenClick(Sender: TObject);
var
  V_Text, V_Passwort:string;
  i, step,d,N,len:Integer;
begin
  d:=0;
  V_Passwort:=E_Passwort.Text;
  len:=length(Memo1.Text);
  getmem(speicher,len);

  FOR i:=1 TO len DO
  begin
    step:=Ord(V_Passwort[d]);
    d:=d+1;
  if d>length(V_Passwort) then d:=1;

  FOR N:=1 TO len DO
  speicher[N]:=ord(Memo1.Text)[N];

  Speicher[i]:=char(step XOR Speicher[i]);
  end;
end;

end.

gammatester 27. Aug 2010 08:48

AW: Codieren mit Passwort
 
Statt
Delphi-Quellcode:
getmem(speicher,len)
nimmt man normalerweise
Delphi-Quellcode:
setlength(speicher,len)
. Die Zeile ist
Delphi-Quellcode:
Speicher[i]:=char(step XOR Speicher[i])
ein Artefakt, auf jeden aber falsch; denn i ist nicht definiert nach der for-Schleife (wenn überhaupt dann = len+1), und der char-Typecast ist bestenfalls überflüssig, besser wäre byte().

Edit: Sehe gerade, daß
Delphi-Quellcode:
Speicher[i]:=char(step XOR Speicher[i])
wohl noch in der i-Schleife liegt, also dann: sinnvoll einrücken und byte() statt char().

Muellermilchtrinker 27. Aug 2010 09:20

AW: Codieren mit Passwort
 
Noch was:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
  E_Passwort.Clear;
end;
Kannst du weglassen, da du das Memo im OI unter Lines leeren kannst und das Editfeld im OI unter Caption.
Würd ich machen, das macht den Code kleiner und übersichtlicher.

implementation 27. Aug 2010 20:35

AW: Codieren mit Passwort
 
Du könntest das Byte-Array auch zum Ausgeben in Hexadezimal oder Base64 umwandeln:
Delphi-Quellcode:
// in etwa:
Memo.Text := ToHex(Encrypt(ToBytes(Memo.Text)));
// vorausgesetzt:
// - In Memo steht vorher der Klartext
// - ToHex() wandelt ein Byte-Array in einen Hex-String um
// - ToBytes() wandelt einen String in ein Byte-Array um
// - Encrypt() verschlüsselt dann den Text

cookie22 28. Aug 2010 02:31

AW: Codieren mit Passwort
 
seh ich genauso. wenn es base64 oder wie auch immer codiert ist, gibt es keine probleme bei der ausgabe im memo.

implementation 28. Aug 2010 08:03

AW: Codieren mit Passwort
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1045447)
Kannst du weglassen, da du das Memo im OI unter Lines leeren kannst und das Editfeld im OI unter Caption.

Meinst du nicht doch eher Text? :mrgreen:

himitsu 28. Aug 2010 08:06

AW: Codieren mit Passwort
 
[edit]
ups verlesen


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Seite 2 von 3     12 3      

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