![]() |
Dateiverschlüsselung |
Auf dieser Seite wird ein Verschlüsselungsprogramm vorgestellt, welches als Editor getarnt ist. Mit diesem Programm können beliebige Dateien verschlüsselt/ entschlüsselt werden, verschlüsselte Textdateien "online" bearbeitet werden und nebenbei kann das Programm auch noch als gewöhnlicher Texteditor eingesetzt werden.
Merkmale: - sehr sichere Verschlüsselung, - als Schlüssel dient eine beliebige Refferenzdatei, - sehr einfach zu handhaben. ![]() ![]() ![]() ![]() |
Wer im Menü "Optionen" auf "Erweiterte Anzeige" klickt, merkt daß in diesem Programm noch etwas anderes steckt. Dieser Editor enthält ein Verschlüsselungs-Tool. Es können verschlüsselte Daten direkt in den Texteditor geladen werden bzw. Daten aus dem Texteditor direkt verschlüsselt gespeichert werden. (Die Daten erscheinen nur im Speicher unverschlüsselt, nicht aber auf der Festplatte!) Außerdem können unter dem Menüpunkt "Datei" beliebige Dateien ver- bzw. entschlüsselt werden. Um das Ver- bzw. Entschlüsseln mit individuellen Optionen zu automatisieren, stehen umfangreiche Kommandozeilenparameter zur Verfügung. Was heißt hier Verschlüsseln? Dieses Programm verschlüsselt Daten, in dem es jedes einzelne Bit mit einem Bit einer beliebigen Refferenzdatei verrechnet. Die Verschlüsselung ist also sehr sicher, weil man immer diese Refferenzdatei benötigt. Sollte nun trotz aller Vorsichtsmaßnahmen jemand ungewollt an die Refferenzdatei gelangen, so nützt ihm dies auch noch nichts. Um eine Datei zu entschlüsseln, benötigt man nämlich noch ein Paßwort, bestehend aus drei Zahlen. Dieses Paßwort bestimmt welche Bits der Refferenzdatei, wie, mit welchen Bits der Datendatei verrechnet werden. Hinweise:
|
["]-reff:Refferenzdatei["] ["]-in:Quelldatei["] ["]-out:Zieldatei oder oder und Zielpfad["] -pa:WERT........Paßwort A (Wert: 0..65535 /Verschiebing Refferenzspeicher) -pb:WERT........Paßwort B (Wert: 0..255 /XOR-Byte ) -pc:WERT........Paßwort C (Wert: 0..7 /Byte-Rotationen) -code...........starte automatisch Verschlüsselung -decode.........starte automatisch Entschlüsselung -close..........beende Programm wenn fertig -replace........überschreibe ev. bestehende Zieldatei -hidden.........verberge Hauptfenster (funktioniert nur wenn -code bzw. -decode und -close angegeben wurde) -noprogressbar..verberge Fortschrittsanzeige (funktioniert wenn auch -hidden angegeben wurde) -noenter........kein Tastaturabfragen bei Fehlern (Quittungsfenster) -extendmenu.....startet direkt im erweiterten Modus -viewfile.......zeige Inhalt der verschlüsselten Datei an (Schreibgeschützt) -editfile.......bearbeite Inhalt der verschlüsselten Datei als Textdatei |
. . const Puffergroesze=524280 {512KB}; setRefferenzlaenge=928; setRefferenzfileMin=100; . . var RefBytes:array[1..setRefferenzlaenge] of byte; . . procedure Tframe1.Button4Click(Sender: TObject); var temp, PasswBLocal, PasswCLocal:byte; RefLaenge, RefPos, n,m, PufferPosLesen, PufferPosSchreiben:integer; s:string; Puffer: array [1..Puffergroesze] of Byte; codieren,decodieren:boolean; begin . . if error=0 then begin // lesen der Refferenzdatei {$I-} AssignFile(refferenz, editRefferenzdatei.Text); FileMode := 0; Reset(refferenz); RefLaenge:=0; while(not eof(refferenz))and(RefLaenge<setRefferenzlaenge)do begin // ermittle Länge der Refferenzdatei inc(RefLaenge); if RefLaenge<=setRefferenzlaenge then Read(refferenz,RefBytes[RefLaenge]); end; CloseFile(refferenz); {$I+} if (IOResult <> 0) or (editRefferenzdatei.text= '') then Error:=2; end; if (error=0)and(RefLaenge<setRefferenzfileMin) then error:=5; // Refferenzdatei zu kurz if error=0 then begin //Auffüllen des Refferenzspeichers n:=1;m:=RefLaenge+1; while m<=setRefferenzlaenge do begin RefBytes[m]:=RefBytes[n];inc(n);inc(m);end; //Ermitteln der tatsächlichen RefferenzPossition RefPos:=EditPasswortA.Value; while RefPos>setRefferenzlaenge do RefPos:=RefPos-setRefferenzlaenge; //Durchschieben des refferenzspeichers m:=0; while m<editPasswortA.Value do begin inc(m); temp:=RefBytes[1]; for n:=1 to setRefferenzlaenge-1 do RefBytes[n]:=RefBytes[n+1]; RefBytes[setRefferenzlaenge]:=temp; end; end; . . if error=0 then begin if codieren then begin //+++++++++++++++++++ c o d i e r e n +++++++++++++++++++++++++++++ randomize; {$I-} // ANFANG Kopf schreiben temp:=0;write(ziel,temp); for n:=1 to length(setDateiKennung) do begin temp:=ord(setDateiKennung[n]); write(ziel,temp); end; temp:=0;write(ziel,temp); s:=ExtractFileName(editQuelldatei.Text);; for n:=1 to 293 do begin if n<=length(s) then temp:=ord(s[n]) else if n=length(s)+1 then temp:=0 else temp:=random(255); write(ziel,temp); end; {$I+} if ioresult<>0 then error:=10; // Ende Kopf schreiben if error=0 then begin n:=1;//reff-zeiger repeat {$I-} blockread(quelle,Puffer,Puffergroesze,PufferPosLesen); for m:=1 to PufferPosLesen do begin temp:=puffer[m]; temp:=temp xor refbytes[n]; // Maskieren mit Refferenz asm // Maskiere und Rotiere mit Passwort B,C MOV AL,temp MOV AH,PasswBLocal MOV CL,PasswCLocal XOR AL,AH ROL AL,CL MOV temp,AL end; puffer[m]:=temp; inc(n);if n>setRefferenzlaenge then n:=1; end; blockwrite(ziel,Puffer,PufferPosLesen,PufferPosSchreiben); {$I+} if ioresult<>0 then error:=8; until (PufferPosLesen=0)or(PufferPosLesen<>PufferPosSchreiben)or(error<>0) end; end; if decodieren then begin //+++++++++++++++++++ d e c o d i e r e n +++++++++++++++++++++++++++++ n:=1; while (n<=315) and(error=0) do begin {$I-} read(quelle,temp);{$I+} inc(n); if ioresult<>0 then error:=11; end; if error=0 then begin n:=1;//reff-zeiger repeat {$I-} blockread(quelle,Puffer,Puffergroesze,PufferPosLesen); for m:=1 to PufferPosLesen do begin temp:=puffer[m]; asm // Maskiere und Rotiere mit Passwort B,C MOV AL,temp MOV AH,PasswBLocal MOV CL,PasswCLocal ROR AL,CL XOR AL,AH MOV temp,AL end; temp:=temp xor refbytes[n]; // Maskieren mit Refferenz puffer[m]:=temp; inc(n);if n>setRefferenzlaenge then n:=1; end; blockwrite(ziel,Puffer,PufferPosLesen,PufferPosSchreiben); {$I+} if ioresult<>0 then error:=12; until (PufferPosLesen=0)or(PufferPosLesen<>PufferPosSchreiben)or(error<>0) end; end; end; {$I-} CloseFile(ziel); CloseFile(quelle); {$I+} if ioresult<>0 then Error:=7; . . |