Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Verschlüsslungsroutine läuft unter Delphi 2010 nicht mehr


jsfrigo - Do 27.05.10 16:07
Titel: Verschlüsslungsroutine läuft unter Delphi 2010 nicht mehr
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:

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 - Do 27.05.10 16:13

Stichwort Unicode? Unicode kam mit Delphi 2009...


jsfrigo - 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 - 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.


jsfrigo - 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 - Fr 28.05.10 10:56

Nur dort, wo du explizit keinen Unicode verwenden willst.