Dateiverschlüsselung
Verfasst: 29.06.2006 11:54

Code: Alles auswählen
;Dies ist ein (kleines und sehr einfaches) Programm zur Dateiverschlüsselung (hat aber bei größeren Dateien noch Probleme).
;Beim Ver- und Entschlüsseln wird Das Passwort in den Verschlüsselungsalgorithmus mit eingebunden, was bedeutet, das verschlüsselte Dateien
;mit jedem Passwort "entschlüsselt" werden können, ohne dass eine Fehlermeldung ausgegeben wird :-). Allerdings steht bei einem falschen Passwort
;in den "entschlüsselten" Dateien nur Schwachsinn.
;Benötigt Version 4.00 oder muss für niedrigere Versionen massiv umgeschrieben werden.
File$=ProgramParameter() ;unterstützt das Standardmäßige Öffnen der ".krypt"-Dateien nach einmaligem Eintrag durch das "Öffnen mit..."-Menü von Windows:
;als Programm exe-Datei des Kompilierten Quellcodes angeben und das Häkchen von "Dateityp immer mit dem ausgewählten Programm öffnen" setzen.
Enumeration
#Window ;Hauptfenster
#Dateiname ;Gadget für Pfad und Namen der zu verschlüsselnden Datei
#PT
#Passwort ;Input-Gadget für das zukünftige Passwort
#Select ;Dateiauswahlgadget
#Mode ;Auswahlgadget für Ver-/Entschlüsselung
#Start ;Startgadget
#Progress ;Fortschrittsanzeige
#Text
#File1
#File2
EndEnumeration
Procedure Krypt(Datei$,Passwort$,Modus$)
If ReadFile(#File1,Datei$) ;Lesendes Öffnen der zu verschlüsselnden Datei
Attributes=GetFileAttributes(Datei$) ;Einlesen der Dateiattribute
Length=Lof(#File1) ;Bestimmung der Dateilänge
SetGadgetAttribute(#Progress,#PB_ProgressBar_Maximum,Length) ;Umstellung der Fortschrittsanzeige
Enumeration #PB_Compiler_EnumerationValue
#Attribute
#Schreibschutz
#Versteckt
#Systemdatei
#Ok
EndEnumeration
OpenWindow(#Attribute,0,0,120,100,"Krypt - Attribute",#PB_Window_WindowCentered,WindowID(#Window)) ;Fenster für zukünftige Datei-Attribute
StickyWindow(#Attribute,1)
AddKeyboardShortcut(#Attribute,#PB_Shortcut_Return,#Ok)
CreateGadgetList(WindowID(#Attribute))
CheckBoxGadget(#Schreibschutz,10,10,100,20,"Schreibschutz") ;Schreibschutz-Optionsgadget
If Attributes & #PB_FileSystem_ReadOnly
SetGadgetState(#Schreibschutz,1)
EndIf
CheckBoxGadget(#Versteckt,10,30,100,20,"Versteckt") ;Versteckt-Optionsgadget
If Attributes & #PB_FileSystem_Hidden
SetGadgetState(#Versteckt,1)
EndIf
CheckBoxGadget(#Systemdatei,10,50,100,20,"Systemdatei") ;Systemdatei-Optionsgadget
If Attributes & #PB_FileSystem_System
SetGadgetState(#Systemdatei,1)
EndIf
ButtonGadget(#Ok,10,73,100,20,"OK")
Repeat
StickyWindow(#Attribute,1)
event=WaitWindowEvent()
Select event
Case #PB_Event_Menu
Select EventMenu()
Case #Ok ;Return-Taste wurde gedrückt
Goto OK
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Ok
OK: ;Einstellungen zwischenspeichern und fortfahren
Schreibschutz=GetGadgetState(#Schreibschutz)
Versteckt=GetGadgetState(#Versteckt)
Systemdatei=GetGadgetState(#Systemdatei)
Break
EndSelect
EndSelect
ForEver
CloseWindow(#Attribute)
Select Modus$
Case "verschlüsseln"
Value=1 ;Wert zur Verschlüsselung im Algorithnus
Case "entschlüsseln"
Value=-1 ;Wert zur Entschlüsselung im Algorithnus
EndSelect
File$=Datei$
If Value=1 ;von hier an bis zursprungmarke "Again:" findet die Überprüfung statt, ob es sich um eine verschlüsselte Datei handelt (Dateierweiterungs-basiert)
V:
If GetExtensionPart(File$)<>"krypt"
New$=File$+".krypt"
Else
MessageRequester("Krypt! - ACHTUNG","Da die Datei bereits verschlüsselt ist, wird der Modus von "+Chr(34)+"verschlüsseln"+Chr(34)+" auf "+Chr(34)+"entschlüsseln"+Chr(34)+" umgestellt.")
Value=-1
Goto E
EndIf
ElseIf Value=-1
E:
If GetExtensionPart(File$)="krypt"
New$=Left(File$,Len(File$)-6)
Else
MessageRequester("Krypt! - ACHTUNG","Da die Datei noch nicht verschlüsselt ist, wird der Modus von "+Chr(34)+"entschlüsseln"+Chr(34)+" auf "+Chr(34)+"verschlüsseln"+Chr(34)+" umgestellt.")
Value=1
Goto V
EndIf
EndIf
Again:
If CreateFile(#File2,New$)<>0 ;Erstellen der neuen Datei
Else
Res=MessageRequester("Krypt! - ERROR","Fehler beim Erstellen der Datei "+Chr(34)+New$+Chr(34)+" !"+Chr(10)+"Möglicherweise ist der Datenträger schreibgeschützt oder Sie besitzen"+Chr(10)+"keine Berechtigungen die Datei in diesem Ordner zu erstellen."+Chr(10)+"Möchten Sie die Datei in ein anderes Verzeichnis "+Modus$+" ?",#PB_MessageRequester_YesNo)
If Res=#PB_MessageRequester_Yes
Path$=PathRequester("Krypt! - Neuen Pfad auswählen",GetPathPart(New$))
New$=Path$+GetFilePart(New$)
Goto Again
Else
ProcedureReturn 0
EndIf
EndIf
SetGadgetText(#Text,UCase(Mid(Modus$,1,1))+Mid(Modus$,2,2)+"schlüsselung läuft...") ;Aktualisierung im Hauptfenster
If Passwort$<>""
Passwortlength=Len(Passwort$)
While Eof(#File1)=0 ;solange das Ende der Datei noch nicht erreicht ist...
Byte=ReadByte(#File1) ;Byte aus Originaldatei einlesen
Byte=(Byte+Value*(Asc(Mid(Passwort$,i,1))+Length))%256 ;Bytewert verändern(eigentliche Verschlüsselung):Modulo 256 von (Bytewert+/-Asciiwert des Buchstabens des Passwortes an der Stelle i +/- Orginaldateilänge)
WriteByte(#File2,Byte) ;schreiben des veränderten Wertes in die neue Datei
pos+1 ;Zeiger in den Dateien erhöhen
If pos % 1000=0
Delay(10)
EndIf
SetGadgetState(#Progress,pos) ;Fortschrittsanzeige aktualisieren
i+1 ;Zeiger im Passwort erhöhen
If i>Passwortlength ;Wenn Zeiger>Passwortlänge...
i=1 ;von vorn anfangen
EndIf
Wend
Else ;ohne Passwort:
While Eof(#File1)=0
Byte=ReadByte(#File1)
Byte=(Byte+Value*Length)%256 ;Modulo 256 von (Bytewert+/-Originaldateilänge)
WriteByte(#File2,Byte)
pos+1
If pos % 1000=0
Delay(10)
EndIf
SetGadgetState(#Progress,pos)
Wend
EndIf
SetGadgetText(#Text,"Krypt!") ;Fertig!!!
SetGadgetState(#Progress,0)
SetGadgetText(#Passwort,"")
CloseFile(#File1)
CloseFile(#File2)
If Schreibschutz=1
NA=#PB_FileSystem_ReadOnly
EndIf
If Versteckt=1
NA|#PB_FileSystem_Hidden
EndIf
If Systemdatei=1
NA|#PB_FileSystem_System
EndIf
SetFileAttributes(New$,NA) ;Dateiattribute setzen
If MessageRequester("Krypt! - FERTIG",UCase(Mid(Modus$,1,1))+Mid(Modus$,2,2)+"schlüsselung abgeschlossen."+Chr(10)+"Soll die Originaldatei gelöscht(!) werden ?",#PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes ;Nachfrage zum löschen der Originaldatei
SetFileAttributes(Datei$,0)
If DeleteFile(Datei$)=0 ;Originaldatei löschen
MessageRequester("Krypt! - ERROR","Originaldatei konnte nicht gelöscht werden. Möglicherweise ist der Datenträger schreibgeschützt oder Sie besitzen"+Chr(10)+"keine Berechtigungen die Datei zu löschen.")
Else
SetGadgetText(#Dateiname,"")
EndIf
EndIf
ProcedureReturn 1
Else
MessageRequester("Krypt! - ERROR","Fehler beim öffnen der Datei "+Chr(34)+Datei$+Chr(34)+" !"+Chr(10)+"Bitte überprüfen Sie, ob die Datei vorhanden ist.")
ProcedureReturn 0
EndIf
EndProcedure
OpenWindow(#Window,0,0,450,100,"Krypt!",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
AddKeyboardShortcut(#Window,#PB_Shortcut_Return,#Start)
CreateGadgetList(WindowID(#Window))
StringGadget(#Dateiname,10,10,250,20,File$)
TextGadget(#PT,10,43,50,20,"Passwort :")
StringGadget(#Passwort,65,40,195,20,"",#PB_String_Password)
ButtonGadget(#Select,270,10,170,20,"Datei auswählen")
ComboBoxGadget(#Mode,270,40,105,20)
AddGadgetItem(#Mode,0,"verschlüsseln")
AddGadgetItem(#Mode,1,"entschlüsseln")
SetGadgetState(#Mode,0)
ButtonGadget(#Start,385,40,55,20,"Krypt!")
ProgressBarGadget(#Progress,10,70,430,12,0,1000)
TextGadget(#Text,10,83,430,20,"Krypt!")
Repeat
event=WaitWindowEvent()
Select event
Case #PB_Event_Menu
Select EventMenu()
Case #Start
Goto Enter
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Select
File$=OpenFileRequester("Krypt!","","Alle Dateien (*.*)|*.*",0)
SetGadgetText(#Dateiname,File$)
SetActiveGadget(#Dateiname)
Case #Dateiname
If GetExtensionPart(GetGadgetText(#Dateiname))="krypt"
SetGadgetState(#Mode,1)
Else
SetGadgetState(#Mode,0)
EndIf
SetGadgetText(#Text,"Dateiname : "+GetGadgetText(#Dateiname))
Case #Start
Enter:
File$=GetGadgetText(#Dateiname)
Passwort$=GetGadgetText(#Passwort)
Mode$=GetGadgetText(#Mode)
Is=Krypt(File$,Passwort$,Mode$)
If Is=0
MessageRequester("Krypt! - ERROR","Vorgang fehlgeschlagen!")
EndIf
EndSelect
EndSelect
Until event=#PB_Event_CloseWindow