Autor Beitrag
M.wieMmanfred
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 15.02.09 18:18 
hey leute,
ich habe eine function:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function verschluessele (hilf1 : string; IntSchluessel : integer) : string;
var hilf2 : string;
        j : integer;
begin
  hilf2 := '';
  for j := 1 to length(hilf1) do
    if hilf1[j] in ['A'..'Z']
    then hilf2 := hilf2 + chr((((ord(hilf1[j]) -65mod 26) + IntSchluessel) mod 26 + 65 )

         else hilf2 := hilf2 + hilf1[j];
  verschluessele := hilf2;
  end;


und eine procedure:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TtextFeld.BtVerschluesseleClick(Sender: TObject);
var i, IntSchluessel : integer;
begin
  IntSchluessel:= StrToInt(SpinEdit1.Text);
  memo2.Lines.Clear;
  for i := 0 to memo1.Lines.Count-1 do
       memo2.Lines.Insert(i,verschluessele(memo1.Lines[i],IntSchluessel));
end;


Es soll nämlich im editfeld ein passwort eingelesen werden, und dann im memofeld verschlüsselt angezeigt werden...

nun will ich statt memo1, ein editfeld einsetzen, aber memo2. lassen...
weiß jemand, wie dann die button-click methode ausehen müsste???
wäre cool wenn mir jemand schnell helfen kann^^

DANKE
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 15.02.09 18:29 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TtextFeld.BtVerschluesseleClick(Sender: TObject);
var i, IntSchluessel : integer;
begin
  IntSchluessel:= StrToInt(SpinEdit1.Text);
  memo2.Lines.Clear;
  for i := 1 to Length(Edit1.Text) do
       memo2.Lines.Insert(i,verschluessele(Edit1.Text[i],IntSchluessel));
end;

In etwa so? Besser du schreibst deine verschlüsselte Zeichenkette erst in eine Stringvariable und weißt dem Memo diese dann zu. Ansonsten wird die gesasmte Form bei jedem Zeichen neu gezeichnet, was dementsprechend Performanceverluste zur Folge hat. ;)
M.wieMmanfred Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 15.02.09 18:35 
hmmmmm so hatte ich das auch schon probiert, allerdings trägt er dann gar nichts ins memofeld ein...
wie meintest du denn das andere, alsodie verschlüsselung erst einer variablen zuweisen??? daran hatte ich auch schon gedacht, allerdings weiß ich nicht, wie du meinst...
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 15.02.09 19:01 
Ich hab es mal etwas umgeschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function VerschluesseleCeasar(const Text: String; IntSchluessel: Integer): String;
var
    i: Integer;
begin
    SetLength(Result, Length(Text));

    for i := 1 to Length(Result) do
        case Text[i] of
            'a'..'z': Result[i] := Chr((((Ord(Text[i]) - 97mod 26) + IntSchluessel) mod 26 + 97);
            'A'..'Z': Result[i] := Chr((((Ord(Text[i]) - 65mod 26) + IntSchluessel) mod 26 + 65);
        else
            Result[i] := Text[i];
        end;
end;

Der Unterschied zu deiner Varianten besteht darin, dass ich nicht ständig den ganzen String kopiere und einen Case-Of-Block anstelle der vielen If-Abfragen einsetze.

Ich will kurz erklären, warum diese Variante etwas besser ist:
Ein String ist ja nichts anderes als Array of Char. Weißt du jedoch einem String ein neues Element respektive Zeichen zu, also z.B. s := s + 'a'; wird neuer Speicher allokiert (angefordert), und der komplette String kopiert.
Bei meiner Variante passiert dies nicht. Ich verwende zudem keine zusätzliche Hilfsvariable als Ablage, sondern direkt die für das Endergebnis vorgesehene "Variable" Result.
Da bei der Ceasarverschlüsselung die Länge des original Textes mit der des Verschlüsselten übereinstimmt, passe ich diese direkt im ersten Schritt mittels SetLength an.
Nun ersetze ich nur noch Zeichen mit bestimmten Index und lasse den Rest des Strings unberührt. ;)

Hoffe, das kam jetzt einigermaßen verständlich rüber. :)
Ich empfehle dir übrigens sinnvollere Parameterbezeichnungen als "Hilf1" zu wählen. Mit "Text" oder "originalText" kann man doch schon deutlich mehr anfangen.
Schau dir zur Codeformatierung DelForExp an. :zwinker:

Ansonsten klappt deine eigene Variante auch ganz gut:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function verschluessele(hilf1: string; IntSchluessel: integer): string;
var hilf2: string;
    j: integer;
begin
    hilf2 := '';
    for j := 1 to length(hilf1) do
    begin
        if hilf1[j] in ['A'..'Z'then
            hilf2 := hilf2 + chr((((ord(hilf1[j]) - 65mod 26) + IntSchluessel) mod 26 + 65)
        else
            if hilf1[j] in ['a'..'z'then
                hilf2 := hilf2 + chr((((ord(hilf1[j]) - 97mod 26) + IntSchluessel) mod 26 + 97)
            else
                hilf2 := hilf2 + hilf1[j];
      end;
    verschluessele := hilf2;
end;
[...]
    memo2.Lines.Add(verschluessele(Memo1.Text, IntSchluessel));

Aber entscheide du selbst, welche du übernehmen willst ;)


Grüße,
Marc
M.wieMmanfred Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 15.02.09 19:19 
danke schonmal, aber es ging mir mehr darum, wie ich einen string aus einem editfeld einlese, verschlüssele und dann in ein memofeld wieder ausgebe...
Nehmen wir an, du willst dich in ein programm einloggen.
Musst dich aber erst registrieren. Gibst benutzername und kennwort ein
bestätigst.
Dann soll das Passwort ausgelesen werden, verschlüsselt werden, und in ein Memofeld reingeschrieben werden, wo hinterher noch andere passwörter von anderen benutzern verschlüsselt rein kommen sollen. In ein nderes Memofeld sollen die benutzernamen rein, das ist ja auch recht einfach.
Beide memofelder sollen dann nach der registrierung gespeichert werden in eine txt file, damit man irgendwann, wenn man das programm wieder starte, sich mit seinen benutzerdaten einlggen kann...


vllt. verstehst du nun worum es geht^^ ;)


//Edit:

ich habs jetzt anders gelöst und zwar wird mein Passwort erst in ein unsichtbares memo eingetreagen, von wo aus es dann verschlüsselt wird und ins richtige memo rein kommt... ;)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

hat jemand eine Ahnung, wie ich das wieder entschlüsseln könnte???