Autor Beitrag
5M17H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: So 24.09.06 12:35 
Hallo an alle.
Ich möchte memo1 eine zeile einfügen, wo ich dann n passwort reinschreibe.
Man soll also die datei öffnen können, sieht aber nur zahlen (siehe freeware projekte 'sf editor v 1.3'). Dann gibts nen menüe punkt wo steht: 'Ver-/Entschlüsseln'.

Jetzt kann man die datei ja mit dem wineditor öffnen, und ich will nicht, das man da dan weis: die ersten 4 zahlen sind das passwort, und dass passwort dan weis. Desswegen möchte ich das passwort aufteilen. Quasi zerhacken. 2stellen in zeile 11 und 5 steleln und zeile 13 oder so.

Wie geht das?

PS: memo1.lines.add bringt ja nix, fügt ja nur am schluss eine zeile dran.


Moderiert von user profile iconChristian S.: Topic aus Dateizugriff verschoben am So 24.09.2006 um 12:57

[edit]
habe jetzt folgendes gemacht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Verschlsseln1Click(Sender: TObject);
var a : integer;
begin
  a := strtoint (edit1.text);
  if a > 9999 then
    memo1.Text := edit1.text + memo1.text
  else
    memo1.text := memo1.text + ' Passwort konnte nciht vergeben werden: Zahl muss größer als 10000 sein.';
end;

so, nun schreibt er die 5zahlen an den anfang des memo1. Allerdings muss ich auch sagen dass er beim öffnen schauen soll ob edit1 auch mit den ersten 5 stellen übereinstimmt.
Wie bekomme ich dafür einen befehl also: schaue ob edit1 mit den ersten 5 stellen des memo1 übereinstimmt.

[edit]
So nun habe ich shcon viel geschafft.
Jetzt ist ein problem:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if edit1.text <> #0 then
begin
  zahl[1] := strtoint(edit1.text[1]);
  zahl[2] := strtoint(edit1.text[2]);
  zahl[3] := strtoint(edit1.text[3]);
  zahl[4] := strtoint(edit1.text[4]);
  zahl[5] := strtoint(edit1.text[5]);
end
else
  memo1.text := 'Bitte 5stelliges passwort eingeben.';

Hier soll er prüfen ob edit1.text lehr ist aber er stürzt trotzdem ab.
Wie lautet der befehl dafür?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if (strtoint (memo1.text[1]) = zahl[1]) and
(strtoint (memo1.text[2]) = zahl[2]) and
(strtoint (memo1.text[3]) = zahl[3]) and
(strtoint (memo1.text[4]) = zahl[4]) and
(strtoint (memo1.text[5]) = zahl[5]) then
begin
  [ .. ]
  DECODIERUNG
  [ .. ]
end
else
  memo1.text := 'Bitte richtiges passwort eingeben.';

In diesem abschnitt soll decodiert werden, natürlich nur wenn edit1 mit den ersten 5 zahlen aus der sf datei übereinstimmt, die natürlich decodiert sind!.

Allerdings sagt er immer das selbe. Wie bekomme ich das hin?
Carl Johnson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
D3
BeitragVerfasst: Mo 25.09.06 14:00 
Also:

Um die Ersten fünf zeichen des Memo mit dem Text des Edit zu Vergleichen, musst du sowohl die ersten fünf Zeichen des Memo (siehe StrPLCopy in der Hilfe) als auch den Edit-Text (siehe StrPCopy) jeweils in einen nullterminierten String umwandeln. Danach vergleichst du beide mit StrComp.
Schau einfach mal in der Delphi-Hilfe nach. Da findest du einige Befehle für den Umgang mit Strings.
Dadurch sparst du dir auch dein gebastel mit dem and-Operator.


Um abzufragen, ob das Edit leer ist, versuch mal
ausblenden Delphi-Quelltext
1:
if Edit1.Text = '' then... //Dann ist das Edit leer!					


Wenn du die Zeichen in Integer-Werte umwandeln möchtest, obwohl keine Zeichen vorhanden sind, solltest du dich nicht über
eine Fehlermeldung wundern!Deshalb solltest du erst abfragen, ob das Edit leer ist, und danach den Vergleich vornehmen.


Bei weiteren Fragen kannst du dich ja nochmal melden.

Viel Spaß.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 25.09.06 15:55 
So nun habe ich folgendes genutzt: Board Suche; Delphi 2005 PE Hilfe; Google; Wiki.

Wer kann mir StrPLCopy erklären, das andere StrPCopy habe ich noch nicht gesucht, aber kann ja derjenige gliehc miterklären.

Bin kein Profi leute.... :lol:
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 25.09.06 16:46 
user profile icon5M17H hat folgendes geschrieben:
So nun habe ich folgendes genutzt: [...] Delphi 2005 PE Hilfe
Glaub ich dir nicht:
Delphi-Hilfe hat folgendes geschrieben:
StrPLCopy Routine

Kopiert eine bestimmte Anzahl Zeichen von einem AnsiString (long) in einen nullterminierten String.

Unit
SysUtils

Syntax


[Delphi] function StrPLCopy(Dest: PAnsiChar, const Source: string, MaxLen: Cardinal): PAnsiChar;


Beschreibung
StrPLCopy kopiert bis zu MaxLen Zeichen von Source in den nullterminierten String Dest. Die Funktion gibt anschließend einen Zeiger auf Dest zurück.

Hinweis: Dest muss auf einen Speicherbereich zeigen, in dem genug Platz für MaxLen + 1 Zeichen ist (einschließich Nullterminator).
Bei StrPCopy kannst du nicht die maximale Länge angeben.

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 25.09.06 22:42 
ausblenden Delphi-Quelltext
1:
function StrPLCopy(Dest: PAnsiChar, const Source: string, MaxLen: Cardinal): PAnsiChar;					

sobald ich DAS dahin schreibe, unterstreicht er es.

Hat jemand evtl, nen codebeispiel, oder ne idee wie ich das (erstmal) anders lösen kann?
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Di 26.09.06 00:12 
Äh ja, du solltest schon die Parameter mit deinen Werten füllen?!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  S: String;
  P: PChar;
begin
  S := 'abcdefg';
  GetMem(P, Length(S));
  P := StrPLCopy(P, S, Length(S) - 2);
  ShowMessage(P);
  FreeMem(P);

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Di 26.09.06 07:57 
Ich glaube ich lasse mir das besser von meinem leherer erklären.
Was ist GetMem? Und warum ist dass alles so verschachtelt.

Ja nun ja, es weis kein mensch eine antwort. Nur die Schlauen können auf die Pauke hauen... xD bin ja nen dichter. Nein schon gut.

Ich lasse das Projekt warscheinlich erstmal warten, bis mir mein leherer Diese codestruktur erklärt hat. Mit worten.

Erstmal will er mit uns Excel Programmieren, zumindest sowas in der Form.


Danke für alle eure Posts.
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Di 26.09.06 09:18 
Hallo!

Hab mich mal ne Viertelstunde hingesetzt!

Rausgekommen ist das im Anhang!

Hoffe das geht in die Richtung

LG
Stefan
Einloggen, um Attachments anzusehen!
_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Sa 30.09.06 01:07 
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:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
procedure TForm1.Button1Click(Sender: TObject);
var zahl1, zahle, i, i2, r, rs : integer;
    zeile : array of integer;
    zahl : array of char;
    code : array[1..5of char;
    f : TextFile;
    dir, s : string;
begin
  zahl1 := strtoint (edit1.text);
  SetLength(zeile, 5000);
  zahle := 0;
  i2 := 0;
  i := 0;
  dir := 'C:\code.txt'//dateipfad
  AssignFile (f, dir); //datei öffnen, dir = dateipfad
  Reset (f); //'f' zurücksetzen
  while not EOF(f) do
  begin
    inc(i); //increas (i := i + 1;)
    ReadLn(f, zeile[i]); //zeile auslesen und in 'zeile' speichern
  end;
  if zahl1 > 9999 then
  begin
    if edit2.text = 'a' then
      zahle := 21322;

    rs := 0;
    r := 0;

    s := inttostr(zahle);
    setlength(zahl, length(s)); //die länge des array 'zahl' so hoch setzen das 's' reinpasst!
    for i := 1 to high(zahl) do
      zahl[i] := s[i];

    for i := i2 to 5 do //solange i gleich i2 bis 5 ist tue
    begin
      code[i2] := edit1.text[i2]; //code[x] ist gleich edit1.text[x] also z.b. code[1] ist die erste stelle von edit1.text
      if Pos(zahl[i], inttostr(zahl1)) > 0 then
        r := r + 1;

      if code[i2] = zahl[i] then
        rs := rs + 1;

      if rs < 5 then
        label3.caption := 'Sie haben '+ inttostr (r) +' richtige und davon '+ inttostr (rs) +' an der richtigen Stelle.'
      else
        label3.Caption := 'Sie haben den Code geknackt: '+ code[1] +''+ code[2] +''+ code[3] +''+ code[4] +''+ code[5] +' !';

      r := 0;
      rs := 0;
    end;
  end
  else  //wenn nicht
    label3.caption := 'Geben Sie Mindestens 10000 ein.'//gib fehlermeldung in label3 aus
end;


Wenn also in edit2 'a' steht soll man die zahl '21322' "hacken".
Dazu soll er hilfe geben.
Jetzt kommt aber manchmal die meldung:
'0Richtige und 1 an der Richtigen Stelle'! Wenn ich 0 Richtige habe kann ich keine an der richtigen stelle haben. Wo ist in diesem code der fehler?

Danke jetzt schon für eine antwort