AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verschüsselungs-DLL mit Fehlern

Ein Thema von RebellX · begonnen am 21. Feb 2009 · letzter Beitrag vom 21. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
RebellX

Registriert seit: 21. Feb 2009
8 Beiträge
 
Delphi 7 Enterprise
 
#1

Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 10:59
Hallo,

ich habe folgendes Problem:
Ich will einen String in einen String aus Zahlen verschlüsseln, aber je nach länge des eingegebenen Strings kommt entweder:
-Ungültige Zeigeroperation
-Zugriffsverletzung bei Adresse 00321F95 im Modul 'Crypt.dll' Lesen der Adresse 0000018
-Das Fenster schließt sich einfach

Hier der Code:

showmessage(crypt(edit2.Text)); Die DLL wird so eingebunden:
Delphi-Quellcode:
  function crypt(s: string): string; stdcall;
  external {$IFDEF __GPC__}name 'crypt'{$ELSE} 'PCrypt.dll'{$ENDIF __GPC__};
und so sieht sie aus:

Delphi-Quellcode:
library PCrypt;

uses
  FastShareMem,
  SysUtils,
  Classes;

  const
   list: array [1..62] of string =
   ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
   'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
   'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7',
   '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
   'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
   't', 'u', 'v', 'w', 'x', 'y', 'z');
   list2: array [1..62] of string =
   ('1', '2', '3', '4', '5', '6', '7',
   '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
   'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
   't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
   'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
   'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');

function crypt1(s: string): string; stdcall;
var wert: array of byte;
    i, j: integer;
    ende: string;
begin
s := s + 'A';
randseed := 4546464;
setlength(wert, length(s));
ende := '';
for i := 0 to length(s)-1 do
begin
for j := 1 to 62 do
begin
if copy(s, i, 1) = list[j] then wert[i] := j;
end;
ende := ende+inttostr(wert[i])+inttostr(random(wert[i]));
end;
for i := 0 to length(s)-1 do
begin
for j := 1 to 62 do
begin
if copy(s, i, 1) = list2[j] then wert[i] := j;
end;
ende := ende+inttostr(wert[i])+inttostr(random(wert[i]));
end;
result := ende;
end;

function crypt(s: string): string; stdcall; export;
var s1, s2: string;
begin
s1 := crypt1(s);
s2 := crypt1(s1);
result := s2;
end;

{$R *.res}

exports
  Crypt;
begin
end.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 11:31
1.) Mit Strings in DLLs arbeiten -> Pfui
2.) Code-Einrückung faktisch nicht vorhanden. Wer soll da durchblicken? -> Pfui
3.) Strings gehen von 1-Length. Nicht von 0-Length (-1)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 11:33
Deine for-Schleifen für die Strings sind falsch. Der ertse Buchstabe eines Strings steht an der Position 1 und nicht null. Ob das allerdings für den Fehler verantwortlich ist, kann ich aber nicht sagen. Ist mir nur aufgefallen.

Ach so und man kann nicht so einfach Strings an DLLs übergeben und wieder zurückgeben. Siehe dazu meinen Artikel: http://www.michael-puff.de/Artikel/StringDLL.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
RebellX

Registriert seit: 21. Feb 2009
8 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 11:41
Ob ich jetzt
for i := 1 to length(s) do
oder
for i := 0 to length(s)-1 do
schreibe macht bei dem Problem irgendwie aber keinen unterschied.
Was die DLL angeht: ich wollte das ganze mal so ausprobieren... Ohne DLL komm ich zu den gleichen Fehlern...
Statt ShareMem verwende ich halt FastShareMem, die braucht kein e weitere DLL.

RebellX
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 11:45
"0 to ..." ist aber 100% falsch.

Wenn's daran nicht lag, liegts woanders.

Breakpoints setzen, F7 und F8 bemühen.

... Aber vorher würde ich erstmal ordentlich einrücken.
  Mit Zitat antworten Zitat
RebellX

Registriert seit: 21. Feb 2009
8 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 12:09
Also ich hab mir das jetzt nochmal angeschaut in der DLL. Aber haltepunkte waren da nicht möglich,
also hab ichs kurz in ne Unit gepackt.

Zitat:
"0 to ..." ist aber 100% falsch.
Dazu hab ich gefunden, dass ohne -1 jetzt noch ein Fehler kommt, mit aber nocht (15 Testläufe).

Laufen tut das ganze jetzt ohne (sichtbare) Fehler.
Ums Einrücken werd ich mich in Zukunft bemühen, auch wenn mir selbst der Code dann unübersichtlich vorkommt^^.

RebellX
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 12:40

was ist denn an einem formatierten Code unübersichtlich? das man sieht wie die Blöcke zusammenhängen?
Nun ja, jeder hat da ja eine andere Wahrnehmung ...
Delphi-Quellcode:
library PCrypt;

uses
  FastShareMem,
  SysUtils,
  Classes;

const
  list: array [1..62] of string =
    ( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
      'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
      'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7',
      '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
      'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
      't', 'u', 'v', 'w', 'x', 'y', 'z' );
  list2: array [1..62] of string =
    ( '1', '2', '3', '4', '5', '6', '7',
      '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
      'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
      't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
      'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
      'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' );

function crypt1(s: string): string; stdcall;
var
  wert: array of byte;
  i, j: integer;
  ende: string;
begin
  s := s + 'A';
  randseed := 4546464;
  SetLength( wert, Length( s ) );
  ende := '';
  for i := 0 to Length( s ) - 1 do
    begin
      for j := 1 to 62 do
        if
          ( Copy( s, i, 1 ) = list[ j ] )
        then
          wert[ i ] := j;
      ende := ende + IntToStr( wert[ i ] ) + IntToStr( Random( wert[ i ] ) );
    end;
  for i := 0 to Length( s ) - 1 do
    begin
      for j := 1 to 62 do
        if
          ( Copy( s, i, 1 ) = list2[ j ] )
        then
          wert[ i ] := j;
      ende := ende + IntToStr( wert[ i ] ) + IntToStr( Random( wert[ i ] ) );
  end;
  result := ende;
end;

function crypt(s: string): string; stdcall; export;
var
  s1, s2: string;
begin
  s1 := crypt1( s );
  s2 := crypt1( s1 );
  result := s2;
end;

{$R *.res}

exports
  Crypt;
begin
end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 12:45
@Rufo: Deine if-Schreibweise in drei Zeilen ist aber auch gewöhnungsbedürftig und, wie ich finde, unübersichtlich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#9

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 13:05
Zitat von nuclearping:
"0 to ..." ist aber 100% falsch.
Ich würd mir das nochmal überlegen !

Es ist eigentlich ziemlich wurscht, wie die Schleife ausschaut. Im Endeffekt ist es wichtig, wie er indiziert (nennt man das - zugreifen auf einzelne Werte eines Strings - so ?)

Delphi-Quellcode:
  str := ';)';
  for i := -3 to Length(Str)-4 do
    Str[i+4] := Chr( Ord(str[i+4]) + 3 );
PS: OK ich habe nochmal nachgesehen und bemerkt, dass er falsch *indiziert

Aber deine Aussagen ist zu 100% falsch.

MfG
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 14:08
Wenn er eine Schleife hat "i := 0 to ..." und dort auch auf String[i] zugreift, ist das 100% falsch.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz