AW: Codieren mit Passwort
Zitat:
Selbst wenn du ein Byte-Array nimmst, wird es Probleme geben, sobald du das Ergebnis z.B. in einem Memo anzeigen willst. |
AW: Codieren mit Passwort
Wie wäre es denn mit einer modifizierten Darstellung?
etwa so:
Delphi-Quellcode:
Man kann das Ersetzen natürlich auch auf die "bösen" Zeichen beschränken (#0,#9,#10,#13.....)
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; Gruß K-H |
AW: Codieren mit Passwort
Zitat:
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. |
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. |
AW: Codieren mit Passwort
Statt
Delphi-Quellcode:
nimmt man normalerweise
getmem(speicher,len)
Delphi-Quellcode:
. Die Zeile ist
setlength(speicher,len)
Delphi-Quellcode:
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().
Speicher[i]:=char(step XOR Speicher[i])
Edit: Sehe gerade, daß
Delphi-Quellcode:
wohl noch in der i-Schleife liegt, also dann: sinnvoll einrücken und byte() statt char().
Speicher[i]:=char(step XOR Speicher[i])
|
AW: Codieren mit Passwort
Noch was:
Delphi-Quellcode:
Kannst du weglassen, da du das Memo im OI unter Lines leeren kannst und das Editfeld im OI unter Caption.
procedure TForm1.FormCreate(Sender: TObject);
begin Memo1.Clear; E_Passwort.Clear; end; Würd ich machen, das macht den Code kleiner und übersichtlicher. |
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 |
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.
|
AW: Codieren mit Passwort
Zitat:
|
AW: Codieren mit Passwort
[edit]
ups verlesen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 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