Einzelnen Beitrag anzeigen

RebellX

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

Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 09: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