AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verschüsselungs-DLL mit Fehlern

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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
42.982 Beiträge
 
Delphi 12 Athens
 
#11

Re: Verschüsselungs-DLL mit Fehlern

  Alt 21. Feb 2009, 14:58
Auch wenn ich die Art der Verschlüsselung "komisch" find ...

- Ramdom zur Verschüsselung: ließ mal in der OH nach, was dort diesbezüglich bei RandSeed steht.
- das mit dem StartIndex 1 bei Strings wurde schon gesagt
- die Codeformatierung ... naja

zur "Verschlüsselung":
- du weißt, daß die Datenmänge vermutlich so durchschnittlich um das 8- bis 12-fache ansteiget?
pro crypt1, also insgesammt 8*8- bis 12*12-fach
- Daten innerhalb des verschlüsselten Strings sind vierfach vorhanden und da crypt1 auch noch doppelt ausgeführt wird, sind die Daten sogar alle 8 mal vorhanden
- du solltest lieber noch eine Fehlerprüfung integrieren, falls mal unzulässige Zeichen im String s vorkommen, also welche die nicht in list/list2 vorkommen
- warum array of string, wo da doch nur Chars drin sind?
Delphi-Quellcode:
  list: array [1..62] of char = ...
  list2: array [1..62] of char = ...
- wieso wert: array of byte;, wo du die Daten sofort verwendest

aber hier zumindestens mal deine Funktion, wie sie erstmal funktionieren sollte
Delphi-Quellcode:
function crypt1(s: string): string; stdcall;
var wert: array of byte;
    i, j: integer;
begin
  s := s + 'A';
  RandSeed := 4546464;
  SetLength(wert, Length(s));
  Result := '';
  for i := 0 to Length(s) - 1 do
  begin
    for j := 1 to 62 do
    begin
      if s[i + 1] = list[j] then wert[i] := j;
    end;
    Result := Result + Format('%d%d', [wert[i], Random(wert[i])]);
  end;
  for i := 0 to Length(s) - 1 do
  begin
    for j := 1 to 62 do
    begin
      if s[i + 1] = list2[j] then wert[i] := j;
    end;
    Result := Result + Format('%d%d', [wert[i], Random(wert[i])]);
  end;
end;
Delphi-Quellcode:
function crypt1(s: string): string; stdcall;
var wert: byte;
    i, j: integer;
begin
  s := s + 'A';
  RandSeed := 4546464;
  Result := '';
  for i := 0 to Length(s) - 1 do
  begin
    for j := 1 to 62 do
    begin
      if s[i + 1] = list[j] then wert := j;
    end;
    Result := Result + Format('%d%d', [wert, Random(wert)]);
  end;
  for i := 0 to Length(s) - 1 do
  begin
    for j := 1 to 62 do
    begin
      if s[i + 1] = list2[j] then wert := j;
    end;
    Result := Result + Format('%d%d', [wert, Random(wert)]);
  end;
end;
wie gesagt, eine Prüfung ob der Variable wert innerhalb der Schleife überhaupt etwas zugewiesen wurde, wäre nicht schlecht
Delphi-Quellcode:
wert := 0;
for j := 1 to 62 do
begin
  if s[i + 1] = list2[j] then wert := j;
end;
if wert = 0 then EineFehlermeldung;
so wie es jetzt ist, hätte "wert" einen zufälligen Inhalt, wenn es keinem Zeichen in list bzw. list2 entspricht.

mit einem Array[Char] of könntest du die ganze J-For-Schleife weglassen, da man damit das Zeichen direkt als Array-Index nutzen kann:
Delphi-Quellcode:
const list: array [AnsiChar] of Byte = (
  {    x0  x1  x2  x3  x4  x5  x6  x7  x8  x9  xa  xb  xc  xd  xe  xf}
  {0x}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {1x}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {2x}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {3x} 36, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0,
  {4x}  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  {5x} 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 0,
  {6x}  0, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
  {7x} 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
  {8x}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {9x}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {ax}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {bx}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {cx}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {dx}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {ex}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  {fx}  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// List2 hab ich jetzt nicht übersetzt, aber mit 'ner
// ASCII-Tabelle kannst das ganz einfach selber machen.
// Im Grunde ist das Ganze nur andersrum zu deinem Array:
// - bei dir wurde eine fortlaufende Zahl je mit einem Zeichen verknüpft
// - hier ist den entsprechenden Zeichen die passende fortlaufende Zahl zugeordnet

function crypt1(s: string): string; stdcall;
var wert: byte;
    i: integer;
begin
  s := s + 'A';
  RandSeed := 4546464;
  Result := '';
  for i := 0 to Length(s) - 1 do
  begin
    wert := list[s[i + 1]];
    if wert = 0 then HierEineFehlermeldungAusgeben;
    Result := Result + Format('%d%d', [wert, Random(wert)]);
  end;
  for i := 0 to Length(s) - 1 do
  begin
    wert := list2[s[i + 1]];
    if wert = 0 then HierEineFehlermeldungAusgeben;
    Result := Result + Format('%d%d', [wert, Random(wert)]);
  end;
end;
Aber wenn du wirklich was "ordentlich" verschlüsseln willst, dann schau dich mal nach Hier im Forum suchenDEC/Bei Google suchenDEC (von Hagen) um
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:35 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