Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateiverschlüsselungs DLL (https://www.delphipraxis.net/29399-dateiverschluesselungs-dll.html)

hamZta 8. Sep 2004 18:04


Dateiverschlüsselungs DLL
 
Am besten ich paste den ganzen Code mal hier rein
Delphi-Quellcode:
{     Dateiverschlüsselung, by hamZta                             }
{     - Zum Verschlüsseln CryptFile(datei, neuerName) verwenden   }
{     - Zum Entschlüsseln DeCryptFile verwenden                   }
{     Verschlüsselt und Entschlüsselt 500 Dateien in 6 Sekunden   }
library dll2;
 

uses
  SysUtils,
  Classes;
 

{$R *.res}
//Das Array in dem die Werte gespeichert sind
var key: Array[1..6] Of Byte;

function SetKey(k1,k2,k3,k4,k5,k6: Integer):integer; stdcall;
begin
    //Alle Werte füllen
    key[1] := k1;
    key[2] := k2;
    key[3] := k3;
    key[4] := k4;
    key[5] := k5;
    key[6] := k6;
end;

//Funktion zum Verschüsseln einer Datei
//  oldFile: PChar = Die Datei die verschlüsselt werden soll
//  newFile: PChar = Der Name den die verschlüsselte Datei bekommen soll
Function CryptFile(oldFile, newFile: PChar): integer; stdcall;
var oFile, nFile: File of Byte;
var cByte, currKey: Byte;
var i: Integer;
begin
  //Die neue Datei schreiben
  AssignFile(nFile, String(newFile));
  ReWrite(nFile);
  //Die alte Datei öffnen
  AssignFile(oFile, String(oldFile));
  Reset(oFile);
  //Hauptvorgang
  //Die ganze alte Datei durchgehen
  for i := 0 to FileSize(oFile)-1 do
    begin
      //Ein Byte auslesen
      Read(oFile,cByte);
      //Den aktuellen Keywert verändern
      currKey := currKey + 1;
      //Der Key ist nur 6stellig
      if currKey > 6 then currKey := 1;
      //Das Byte mithilfe von Xor und dem aktuellem Keywert verschlüsseln
      cByte := cByte Xor key[currKey];
      //Und in die neue Datei schreiben
      Write(nFile,cByte);
    end;
  closefile(oFile);
  closefile(nFile);
end;

//Die Funktion DeCryptFile ist genau dieselbe Funktion wie CryptFile
//(Existiert eigentlich nur der Übersicht halber :D)
Function DeCryptFile(oldFile, newFile: PChar): integer; stdcall;
var oFile, nFile: File of Byte;
var cByte, currKey: Byte;
var i: Integer;
begin
  //Write new File
  AssignFile(nFile, String(newFile));
  ReWrite(nFile);
  //Read old File
  AssignFile(oFile, String(oldFile));
  Reset(oFile);

  //Hauptvorgang
  for i := 0 to FileSize(oFile)-1 do
    begin
      Read(oFile,cByte);
      currKey := currKey + 1;
      if currKey > 6 then currKey := 1;
      cByte := cByte Xor key[currKey];
      Write(nFile,cByte);
    end;
  closefile(oFile);
  closefile(nFile);
end;

exports
  CryptFile name 'CryptFileA',
  DeCryptFile name 'DeCryptFileA',
  SetKey name 'SetKeyA';

begin

end.
Vielleicht kann ja irgendwer was damit anfangen

hamZta

[edit=Chakotay1308]Delphi- ([delphi]) statt Code-Tags ([code]). Mfg, Chakotay1308[/edit]

titus 8. Sep 2004 18:07

Re: Dateiverschlüsselungs DLL
 
hä?
Zitat:

//Die Funktion DeCryptFile ist genau dieselbe Funktion wie CryptFile
//(Existiert eigentlich nur der Übersicht halber :D)

Matze 8. Sep 2004 18:09

Re: Dateiverschlüsselungs DLL
 
Das verstehe ich auch nicht ganz, ist es also so, wie bei der XOR-Verschlüsselung, dass man eine Prozedur hat, die beides erledigt? :gruebel:

Wie sicher ist denn dieses Verfahren?

Edit: :shock: Das ist ja XOR :shock:

hamZta 8. Sep 2004 18:09

Re: Dateiverschlüsselungs DLL
 
dachte mir das das unverständlich ist
beispiel:
man hat eine Datei, verschlüsselt diese mit CryptFile("datei.bmp","verschluesselt.bmp").
jetzt könnte man diese Datei auch wieder mit CryptFile("verschluesselt.bmp","datei.bmp") in den Originalzustand versetzen, aber da dies bei langem Code verwirrend ist hab ich die 2te Funktion, DeCryptFile, gemacht.

verständlicher?

titus 8. Sep 2004 19:16

Re: Dateiverschlüsselungs DLL
 
Aso, für einen selber, damit man merkt: Aha die Datei hab ich ent bzw. verschlüsselt?
Richtig?

mfG

hamZta 8. Sep 2004 19:41

Re: Dateiverschlüsselungs DLL
 
richtig ;)
das ganze ist relativ sicher.
was is denn an xor so schlecht?

Matze 8. Sep 2004 20:01

Re: Dateiverschlüsselungs DLL
 
Zitat:

Zitat von hamZta
richtig ;)
das ganze ist relativ sicher.
was is denn an xor so schlecht?

Sicher? Also XOR ist die unsicherste Verschlüsselungsart, die ich kenne.

XOR haben wir auch schon in der Code-Library drin, siehe XORXOR. ;)
Eine viel bessere ist RC4, das haben wir hier auch: RC4RC4 und, man kann eigentlich sagen, das Beste ist das Hier im Forum suchenDEC von Hagen Redmann(sry, falls es falsch geschrieben ist :roll: hier bekannt als negaH.

negaH 9. Sep 2004 11:28

Re: Dateiverschlüsselungs DLL
 
Zitat:

richtig
das ganze ist relativ sicher.
was is denn an xor so schlecht?
Sorry, du meintest wohl relativ unsicher, richtig ?

Ok, ich schicke dir Daten die du dann verschlüsseln sollst. Diese Daten könnten Zb. am Anfang aus 24 Bytes Nullen bestehen. Verschlüsselst du mit deinem Algorithmus so kann ich anhand der Verschlüsselten Daten in den ersten 24 bytes DIREKT deinen Schlüssel auslesen ! Probiere es und verschlüssele mal 24 Bytes aus Nullen und schaue dir danach den Output genau an.

So, da du aber Blockweise a 24 Bytes die Datei verschlüsselst ist jeder Block unabhänig vom anderen Block. Bei einer Datei mit 24 * 256 Bytes größe ist die Wahrscheinlichkeit ca. 50% für jedes dieser Bytes das es in der Datei vorher 0 war. Sogesehen könnte man mit sehr hoher Wahrscheinlichkeit direkt aus den verschlüsselten Daten den benutzten Schlüssel berechnen. Dies ist weit weit effizienter als wenn man alle möglichen Schlüssel durchbprobieen würde. Eine Verschlüsselung gilt dann als unsicher wenn es einen Weg zum Knacken gibt der schneller als eine Brute Force Attacke ist.

Komme mir jetzt nicht mit der Aufforderung "Hagen ich habe mal eine Datei verschlüsselt, kannst du versuchen dieses zu knacken ?, NEIN kann und werde ich nicht da es DEINE Aufgabe ist UNS zu beweisen das deine Verfahren sicher ist.


Gruß Hagen

PS: scherzhaft gesagt, ich habe schon bessere Verfahren zur Speicherung eines Passwortes in einer Datei gesehen ;)

negaH 9. Sep 2004 11:37

Re: Dateiverschlüsselungs DLL
 
XOR ansich ist nicht schlecht, nicht im gerngsten. Es ist eine Operation die mit absolut ausgewogener Wahscheinlichkeit zwei Datenbytes miteinander verknüpf. So gesehen ist XOR sogar eine perfekt lineare Operation für Veschlüsselungen.

Das Problem mit deiner XOR Variante ist nicht die XOR Operation sondern die Daten->der Schlüsselstrom mit dem due die Nachricht verschlüsselst. Dieser ist absolut unsicher, da du
1.) direkt den Schlüssel dazu benutzt, und somit die verschlüsselten Daten einen direkten Zusammenhang zum Schlüssel + Daten bilden
2.) du jeden Block unabhänig von den anderen Blöcken verschlüsselst, und somit die Variations-Wahrscheinlichkeit für verschiedene Angriffe drastisch erhöhst.

Die RC4 Verschlüsselung ist auch eine XOR Verschlüsselung, allerdings gibt es
1.) keinen direkten Zusammenhang von Schlüssel zu den Daten + verschlüsseltem Output
2.) produziert RC4 eine kontinuierlichen Schlüsselstrom bei denen es keine Wiederholungen gibt, sprich keine Blöcke
3.) wurde RC4 von anerkannten Kryptoexperten analysiert und schon seit Jahren als sicher bestätigt

Gruß Hagen

DP-Maintenance 15. Okt 2004 20:47

DP-Maintenance
 
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Beitrag ist nun hier in der Code-Library zu finden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 Uhr.
Seite 1 von 3  1 23      

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