Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Verschlüsslungsroutine läuft unter Delphi 2010 nicht mehr
spacer
Autor Nachricht
jsfrigo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 40
Dabei seit: 27.12.2005


win xp
D7
BeitragVerfasst: Do 27.05.10 16:07  Antworten mit Zitat Beitrag melden
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 markieren
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
Private Nachricht sendenPosting in privater Nachricht zitieren
platzwart
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star

Beiträge: 674
Erhaltene Danke: 2
Dabei seit: 12.12.2005


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

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Private Nachricht sendenPosting in privater Nachricht zitieren
jsfrigo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 40
Dabei seit: 27.12.2005


win xp
D7
BeitragVerfasst: Do 27.05.10 16:29  Antworten mit Zitat Beitrag melden
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????
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator

Beiträge: 7462
Erhaltene Danke: 21
Dabei seit: 22.11.2002
Wohnort: Düsseldorf

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Do 27.05.10 16:40  Antworten mit Zitat Beitrag melden
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.

_________________
Oel ngati kameie.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
jsfrigo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 40
Dabei seit: 27.12.2005


win xp
D7
BeitragVerfasst: Fr 28.05.10 07:30  Antworten mit Zitat Beitrag melden
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??
Private Nachricht sendenPosting in privater Nachricht zitieren
platzwart
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star

Beiträge: 674
Erhaltene Danke: 2
Dabei seit: 12.12.2005


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

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home