Autor |
Beitrag |
5M17H
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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 Christian S.: Topic aus Dateizugriff verschoben am So 24.09.2006 um 12:57
[edit]
habe jetzt folgendes gemacht:
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:
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?
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
      
Beiträge: 19
Win XP
D3
|
Verfasst: 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
Delphi-Quelltext 1:
| if Edit1.Text = '' then... |
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 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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.... 
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mo 25.09.06 16:46
5M17H 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 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 25.09.06 22:42
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
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Di 26.09.06 00:12
Äh ja, du solltest schon die Parameter mit deinen Werten füllen?!
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 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Sa 30.09.06 01:07
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..5] of char; f : TextFile; dir, s : string; begin zahl1 := strtoint (edit1.text); SetLength(zeile, 5000); zahle := 0; i2 := 0; i := 0; dir := 'C:\code.txt'; AssignFile (f, dir); Reset (f); while not EOF(f) do begin inc(i); ReadLn(f, zeile[i]); end; if zahl1 > 9999 then begin if edit2.text = 'a' then zahle := 21322;
rs := 0; r := 0;
s := inttostr(zahle); setlength(zahl, length(s)); for i := 1 to high(zahl) do zahl[i] := s[i];
for i := i2 to 5 do begin code[i2] := edit1.text[i2]; 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 label3.caption := 'Geben Sie Mindestens 10000 ein.'; 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
|
|
|