![]() |
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;
.
.
|