![]() |
Dateiverschlüsselungs DLL
Am besten ich paste den ganzen Code mal hier rein
Delphi-Quellcode:
Vielleicht kann ja irgendwer was damit anfangen
{ 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. hamZta [edit=Chakotay1308]Delphi- ([delphi]) statt Code-Tags ([code]). Mfg, Chakotay1308[/edit] |
Re: Dateiverschlüsselungs DLL
hä?
Zitat:
|
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: |
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? |
Re: Dateiverschlüsselungs DLL
Aso, für einen selber, damit man merkt: Aha die Datei hab ich ent bzw. verschlüsselt?
Richtig? mfG |
Re: Dateiverschlüsselungs DLL
richtig ;)
das ganze ist relativ sicher. was is denn an xor so schlecht? |
Re: Dateiverschlüsselungs DLL
Zitat:
XOR haben wir auch schon in der Code-Library drin, siehe ![]() Eine viel bessere ist RC4, das haben wir hier auch: ![]() ![]() |
Re: Dateiverschlüsselungs DLL
Zitat:
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 ;) |
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
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Beitrag ist nun ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz