Autor Beitrag
jsfrigo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

win xp, Win7
D2010
BeitragVerfasst: Do 27.05.10 16:07 
Ich habe eine einfache Verschlüsselungsroutine geschriben die unter Delphi 7 noch einwandfrei funktioniert hat.
Unter Delphi 2010 liefert die Entschlüsselungsrooutine jedoch manchmal ein falsches Ergebnis.

Hier der Quellcode:
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:
// Verschlüssel ein Passwort
function TfMain.PasswortVerschluesseln(unverpass:string):string;
var einzel,verpass:string;
    i,einzelzahl:integer;
    zeichen: char;
begin
  verpass:='';//initialisieren
  for i := 1 to length(unverpass) do
  begin
    einzel:=unverpass;
    zeichen:=einzel[i]; //einzelnes zeichen auswählen und in char8
    einzelzahl:=ord(zeichen)+funktionswert(i*i); //zeichen verschluesseln
    while einzelzahl > 255 do einzelzahl := einzelzahl - 224//überlauf verhindern
    while einzelzahl < 32  do einzelzahl := einzelzahl + 224//   "
    verpass:=verpass + chr(einzelzahl); //verschlüsseltes zeichen anhängen
  end;
  result:=verpass;
end;


// Entschlüsselt ein passwort
function tfMain.passwortentschluesseln(verpass:string):string;
var unverpass:string;
    i,einzelzahl:integer;
    zeichen:char;
begin
  unverpass:='';//initialisieren
  for i := 1 to length(verpass) do
  begin
    zeichen:=verpass[i]; //einzelnes zeichen auswählen
    einzelzahl:=ord(zeichen)-funktionswert(i*i); //zeichen entschluesseln
    while einzelzahl > 255 do einzelzahl := einzelzahl - 224//überlauf verhindern
    while einzelzahl < 32  do einzelzahl := einzelzahl + 224//   "
   unverpass:=unverpass + chr(einzelzahl); //entschlüsseltes zeichen anhängen
  end;
  result:=unverpass;
end;

function TfMain.funktionswert(x:integer):integer;
begin
  result:= 2*x*x+5*x+3 //konstante zahl per funktion y=2x²+5x+3 bestimmen
end;


Wenn Fehler auftreten, treten diese auch nur bei einzelenen Zeichen auf.
Also wenn ich z.B. jörgs ver und anschließend entschlüssele kommt jörg€ dabei herraus??

Gruss

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 28.05.2010 um 09:36
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Do 27.05.10 16:13 
Stichwort Unicode? Unicode kam mit Delphi 2009...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
jsfrigo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

win xp, Win7
D2010
BeitragVerfasst: Do 27.05.10 16:29 
Den Unicode hatte ich auch schon im Verdacht. ABer was heißt das jetzt konkret in meinem Fall
Welche Funktonen muss ich statt ord und chr den Verwenden um die Zeichen umzuwandeln?
Ansichar statt char funktioniert zwar beim verschlüssel aber das entschlüsseln funktioniert trotzdem nicht????
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 27.05.10 16:40 
Für mich sieht das auch nach einem Unicode-Problem aus, auch wenn ich die Ursache in dem Code nicht direkt ausmachen kann. :lupe:
Da du aber sowieso nur mit den Ansi-Zeichen arbeitest und alles andere eh wegschneidest, würde ich dann auch nur mit AnsiStrings arbeiten. Ersetze also mal alle Char durch AnsiChar und alle String durch AnsiString. Dann sollte sich das eigentlich genauso wie unter Delphi7 verhalten.

_________________
We are, we were and will not be.
jsfrigo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

win xp, Win7
D2010
BeitragVerfasst: Fr 28.05.10 07:30 
Ich habe im Code jetzt char durch ansichar , bzw string durch ansistring ersetzt.
Jetzt funktioniert es. Danke.
Muss jetzt eigentlich im gesamten Projekt string durch ansistring ersetzt werden??
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Fr 28.05.10 10:56 
Nur dort, wo du explizit keinen Unicode verwenden willst.

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)