Global quit
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#String_search
#Button_search
#Text_search
#String_saveto
#Button_saveto
#Text_saveto
#Radio_ver
#Radio_ent
#Track_save
#Text_save
#ProgressBar
#Button_go
#Text_pw
#Text_pw2
#String_pw
#String_pw2
#Text_time
#List_info
EndEnumeration
Procedure Quersumme(zahl.q)
Protected Result.l
If zahl < 0 : zahl * -1 : EndIf
While zahl
Result + zahl % 10
zahl / 10
Wend
ProcedureReturn Result
EndProcedure
Procedure.s FriZaV(*text,pawo$,save)
Dim text.w(5,5)
Dim pawo.w(5,5)
For y = 1 To 4
For x = 1 To 4
z = y + ((x-1) * 4)
text(x,y) = PeekC(*text+z-1)
pawo(x,y) = Asc(Right(Left(pawo$,z),1))
Next x
Next y
For y = 1 To 4
For x = 1 To 4
hex$ = RSet(Hex(text(x,y)), 2, "0")
taus0$ = Left(hex$,1)
taus1$ = Right(hex$,1)
hex$ = taus1$ + taus0$
text(x,y) = Hex2Dec(hex$)
Next x
Next y
For y = 1 To 4
For x = 1 To 4
byte = text(x,y)
byte = byte + pawo(x,y)
If byte > 255
byte - 256
EndIf
text(x,y) = byte
Next x
Next y
For y = 1 To 4
For x = 1 To 4
hex$ = RSet(Hex(text(x,y)), 2, "0")
taus0$ = Left(hex$,1)
taus1$ = Right(hex$,1)
hex$ = taus1$ + taus0$
text(x,y) = Hex2Dec(hex$)
Next x
Next y
For z = 1 To save
For Spalte = 4 To 2 Step -1
Swap text(1,Spalte) , text(1,Spalte-1)
Next
For Spalte = 1 To 3 Step 1
Swap text(3,Spalte) , text(3,Spalte+1)
Next
For Spalte = 1 To 2 Step 1
Swap text(4,Spalte) , text(4,Spalte+2)
Next
For Zeile = 1 To 2 Step 1
Swap text(Zeile,1) , text(Zeile+2,1)
Swap text(Zeile,2) , text(Zeile+2,2)
Swap text(Zeile,3) , text(Zeile+2,3)
Swap text(Zeile,4) , text(Zeile+2,4)
Next
pwcount = 0
For pwd = 1 To 4
pwcount = pwcount + 1
pwrand1 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
pwcount = pwcount + 1
pwrand2 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
pwcount = pwcount + 1
pwrand3 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
pwcount = pwcount + 1
pwrand4 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
Swap text(pwrand1,pwrand2) , text(pwrand3,pwrand4)
Next pwd
Next z
For y = 1 To 4
For x = 1 To 4
byte = text(x,y)
byte = byte + pawo(x,y)
If byte > 255
byte - 256
EndIf
text(x,y) = byte
Next x
Next y
For y = 1 To 4
For x = 1 To 4
hex$ = RSet(Hex(text(x,y)), 2, "0")
taus0$ = Left(hex$,1)
taus1$ = Right(hex$,1)
hex$ = taus1$ + taus0$
text(x,y) = Hex2Dec(hex$)
Next x
Next y
For x = 1 To 4
For y = 1 To 4
PokeC(*text+y+x*4-5, text(x,y))
Next y
Next x
EndProcedure
Procedure.s FriZaE(*text,pawo$,save)
Dim text.w(5,5)
Dim pawo.w(5,5)
For y = 1 To 4
For x = 1 To 4
z = y + ((x-1) * 4)
text(x,y) = PeekC(*text+z-1)
pawo(x,y) = Asc(Right(Left(pawo$,z),1))
Next x
Next y
For y = 1 To 4
For x = 1 To 4
hex$ = RSet(Hex(text(x,y)), 2, "0")
taus0$ = Left(hex$,1)
taus1$ = Right(hex$,1)
hex$ = taus1$ + taus0$
text(x,y) = Hex2Dec(hex$)
Next x
Next y
For y = 1 To 4
For x = 1 To 4
byte = text(x,y)
byte = byte - pawo(x,y)
If byte < 0
byte + 256
EndIf
text(x,y) = byte
Next x
Next y
For z = 1 To save
pwcount = 17
For pwd = 1 To 4
pwcount = pwcount - 1
pwrand1 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
pwcount = pwcount - 1
pwrand2 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
pwcount = pwcount - 1
pwrand3 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
pwcount = pwcount - 1
pwrand4 = (Asc(Right(Left(pawo$,pwcount),1)) % 3) + 1
Swap text(pwrand4,pwrand3) , text(pwrand2,pwrand1)
Next pwd
For Zeile = 4 To 3 Step -1
Swap text(Zeile,4) , text(Zeile-2,4)
Swap text(Zeile,3) , text(Zeile-2,3)
Swap text(Zeile,2) , text(Zeile-2,2)
Swap text(Zeile,1) , text(Zeile-2,1)
Next
For Spalte = 2 To 4 Step 1
Swap text(1,Spalte) , text(1,Spalte-1)
Next
For Spalte = 3 To 1 Step -1
Swap text(3,Spalte) , text(3,Spalte+1)
Next
For Spalte = 2 To 1 Step -1
Swap text(4,Spalte) , text(4,Spalte+2)
Next
Next z
For y = 1 To 4
For x = 1 To 4
hex$ = RSet(Hex(text(x,y)), 2, "0")
taus0$ = Left(hex$,1)
taus1$ = Right(hex$,1)
hex$ = taus1$ + taus0$
text(x,y) = Hex2Dec(hex$)
Next x
Next y
For y = 1 To 4
For x = 1 To 4
byte = text(x,y)
byte = byte - pawo(x,y)
If byte < 0
byte + 256
EndIf
text(x,y) = byte
Next x
Next y
For y = 1 To 4
For x = 1 To 4
hex$ = RSet(Hex(text(x,y)), 2, "0")
taus0$ = Left(hex$,1)
taus1$ = Right(hex$,1)
hex$ = taus1$ + taus0$
text(x,y) = Hex2Dec(hex$)
Next x
Next y
For x = 1 To 4
For y = 1 To 4
PokeC(*text+y+x*4-5, text(x,y))
Next y
Next x
EndProcedure
Procedure FileKeyV(File.s,Saveto.s,password.s,save.l)
fsize = FileSize(File.s)
MD5$ = MD5FileFingerprint(File.s)
If ReadFile(1,File.s) = 0
ProcedureReturn 2
EndIf
SetGadgetAttribute(#ProgressBar, #PB_ProgressBar_Maximum, fsize)
If CreateFile(2,Saveto.s) = 0
CloseFile(1)
ProcedureReturn 3
EndIf
pwlength = Len(password.s)
pointer = 0
temp = 0
If pwlength = 0
CloseFile(1)
CloseFile(2)
ProcedureReturn 5
ElseIf pwlength < 16
Repeat
password = password + password
Until Len(password) >= 16
Left(password,16)
Else
Left(password,16)
EndIf
If save > 20
CloseFile(1)
CloseFile(2)
ProcedureReturn 4
EndIf
WriteCharacter(2,70):WriteCharacter(2,114):WriteCharacter(2,105):WriteCharacter(2,90):WriteCharacter(2,97)
WriteLong(2, fsize)
WriteCharacter(2, save)
rest = fsize % 16
runnin = (fsize - rest + 16) / 16
elapsed= ElapsedMilliseconds()
elapsed2=ElapsedMilliseconds()
show = 500
slow = 10
For x = 1 To runnin
If x < runnin
*buffer = AllocateMemory(16)
ReadData(1, *buffer, 16)
FriZaV(*buffer,password,save)
WriteData(2, *buffer, 16)
FreeMemory(*buffer)
ElseIf x = runnin
*buffer = AllocateMemory(16)
fullup = fsize - Loc(1)
ReadData(1, *buffer, fsize - Loc(1))
For rand = fullup To 15
PokeC(*buffer+rand, Random(255))
Next rand
FriZaV(*buffer,password,save)
WriteData(2, *buffer, 16)
FreeMemory(*buffer)
EndIf
pointer = pointer + 16
temp = temp + 16
If x = runnin
SetGadgetState(#ProgressBar,pointer)
temp = 0
ElseIf temp >= 10000
SetGadgetState(#ProgressBar,pointer)
temp = 0
EndIf
If ElapsedMilliseconds() - elapsed2 >= 1000
unterschied = x-oldx
kbs = unterschied * 16 / 1024
oldx = x
elapsed2=ElapsedMilliseconds()
EndIf
If x >= show
If slow = 10
tneed = ElapsedMilliseconds() - elapsed
tleft = tneed * (runnin - x) / 1000 / 500
If Round(tleft/60, 0) > 999
rsetval = 4
ElseIf Round(tleft/60, 0) > 99
rsetval = 3
Else
rsetval = 2
EndIf
SetGadgetText(#Text_time,"Geschätzte Dauer : " + RSet(Str(Round(tleft/60, 0)),rsetval,"0")+":"+RSet(Str(tleft%60),2,"0")+" bei "+Str(kbs)+" kb/s")
slow = 0
EndIf
elapsed= ElapsedMilliseconds()
slow = slow + 1
show = x + 500
EndIf
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
CloseFile(1)
CloseFile(2)
DeleteFile(Saveto.s)
Quit = 1
ProcedureReturn 7
ElseIf Event = #PB_Event_Gadget Or Event = #PB_Event_Menu
Select EventGadget()
Case #Button_go
CloseFile(1)
CloseFile(2)
DeleteFile(Saveto.s)
ProcedureReturn 6
EndSelect
EndIf
Next x
WriteString(2,MD5$)
CloseFile(1)
CloseFile(2)
ProcedureReturn 1
EndProcedure
Procedure FileKeyE(File.s,Saveto.s,password.s)
fsize = FileSize(File.s)
If ReadFile(1,File.s) = 0
ProcedureReturn 2
EndIf
SetGadgetAttribute(#ProgressBar, #PB_ProgressBar_Maximum, fsize)
If CreateFile(2,Saveto.s) = 0
CloseFile(1)
ProcedureReturn 3
EndIf
pwlength = Len(password.s)
pointer = 0
temp = 0
elapsed= ElapsedMilliseconds()
show = 500
slow = 10
If pwlength = 0
CloseFile(1)
CloseFile(2)
ProcedureReturn 6
ElseIf pwlength < 16
Repeat
password = password + password
Until Len(password) >= 16
Left(password,16)
Else
Left(password,16)
EndIf
friza1 = ReadCharacter(1)
friza2 = ReadCharacter(1)
friza3 = ReadCharacter(1)
friza4 = ReadCharacter(1)
friza5 = ReadCharacter(1)
efsize = ReadLong(1)
save = ReadCharacter(1)
rfsize = fsize - 42
runnin = rfsize / 16
If friza1 <> 70 Or friza2 <> 114 Or friza3 <> 105 Or friza4 <> 90 Or friza5 <> 97
CloseFile(1)
CloseFile(2)
ProcedureReturn 4
EndIf
If save > 20
CloseFile(1)
CloseFile(2)
ProcedureReturn 5
EndIf
For x = 1 To runnin
If x < runnin
*buffer = AllocateMemory(16)
ReadData(1, *buffer, 16)
FriZaE(*buffer,password,save)
WriteData(2, *buffer, 16)
FreeMemory(*buffer)
ElseIf x = runnin
*buffer = AllocateMemory(16)
ReadData(1, *buffer, 16)
FriZaE(*buffer,password,save)
WriteData(2, *buffer, efsize)
FreeMemory(*buffer)
EndIf
efsize = efsize - 16
pointer = pointer + 16
temp = temp + 16
If fsize - pointer = 0
SetGadgetState(#ProgressBar,pointer)
temp = 0
ElseIf temp >= 10000
SetGadgetState(#ProgressBar,pointer)
temp = 0
EndIf
If ElapsedMilliseconds() - elapsed2 >= 1000
unterschied = x-oldx
kbs = unterschied * 16 / 1024
oldx = x
elapsed2=ElapsedMilliseconds()
EndIf
If x >= show
If slow = 10
tneed = ElapsedMilliseconds() - elapsed
tleft = tneed * (runnin - x) / 1000 / 1000
If Round(tleft/60, 0) > 999
rsetval = 4
ElseIf Round(tleft/60, 0) > 99
rsetval = 3
Else
rsetval = 2
EndIf
SetGadgetText(#Text_time,"Geschätzte Dauer : " + RSet(Str(Round(tleft/60, 0)),rsetval,"0")+":"+RSet(Str(tleft%60),2,"0")+" bei "+Str(kbs)+" kb/s")
slow = 0
EndIf
elapsed= ElapsedMilliseconds()
slow = slow + 1
show = x + 500
EndIf
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
CloseFile(1)
CloseFile(2)
DeleteFile(Saveto.s)
Quit = 1
ProcedureReturn 9
ElseIf Event = #PB_Event_Gadget Or Event = #PB_Event_Menu
Select EventGadget()
Case #Button_go
CloseFile(1)
CloseFile(2)
DeleteFile(Saveto.s)
ProcedureReturn 8
EndSelect
EndIf
Next x
MD5$ = ReadString(1)
CloseFile(1)
CloseFile(2)
If MD5FileFingerprint(Saveto.s) <> MD5$
DeleteFile(Saveto.s)
ProcedureReturn 7
EndIf
ProcedureReturn 1
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 390, 280, "FileKey", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return,#Button_go)
TextGadget(#Text_search, 10, 10, 150, 20, "Datei auswählen :")
StringGadget(#String_search, 10, 40, 150, 20, "")
ButtonGadget(#Button_search, 170, 40, 20, 20, "...")
TextGadget(#Text_saveto, 200, 10, 150, 20, "Datei speichern :")
StringGadget(#String_saveto, 200, 40, 150, 20, "")
ButtonGadget(#Button_saveto, 360, 40, 20, 20, "...")
TextGadget(#Text_pw, 10, 70, 50, 20, "Passwort :")
StringGadget(#String_pw, 70, 70, 120, 20, "",#PB_String_Password)
TextGadget(#Text_pw2, 200, 70, 50, 20, "nochmal :")
StringGadget(#String_pw2, 260, 70, 120, 20, "",#PB_String_Password)
OptionGadget(#Radio_ver, 10, 100, 90, 20, "Verschlüsseln")
OptionGadget(#Radio_ent, 100, 100, 90, 20, "Entschlüsseln")
TrackBarGadget(#Track_save, 200, 100, 160, 20, 1, 20)
TextGadget(#Text_save, 350, 100, 20, 20, "1", #PB_Text_Right)
ProgressBarGadget(#ProgressBar, 10, 130, 370, 20, 0, 10)
TextGadget(#Text_time,10,160,370,20,"Geschätzte Dauer : 00:00 bei 0 kb/s")
ButtonGadget(#Button_go, 10, 190, 370, 20, "Start")
ListViewGadget(#List_info, 10, 220, 370, 50)
EndIf
EndIf
EndProcedure
Open_Window_0()
SetGadgetState(#Radio_ver,1)
SetActiveGadget(#String_pw)
para$ = ProgramParameter()
If para$ <> ""
SetGadgetState(#Radio_ent,1)
SetGadgetText(#String_search,para$)
SetGadgetText(#String_saveto,Left(para$,Len(para$)-4))
DisableGadget(#Track_save,1)
HideGadget(#Text_save,1)
DisableGadget(#String_pw2,1)
HideGadget(#Text_pw2,1)
EndIf
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
Quit = 1
ElseIf Event = #PB_Event_Gadget Or Event = #PB_Event_Menu
Select EventGadget()
Case #Button_go
DisableGadget(#String_search,1)
DisableGadget(#Button_search,1)
DisableGadget(#String_saveto,1)
DisableGadget(#Button_saveto,1)
DisableGadget(#Radio_ver,1)
DisableGadget(#Radio_ent,1)
DisableGadget(#Track_save,1)
DisableGadget(#String_pw,1)
DisableGadget(#String_pw2,1)
#String_saveto
SetGadgetText(#Button_go,"Stop")
SetGadgetText(#Text_time,"Geschätzte Dauer : 00:00 bei 0 kb/s")
If GetGadgetState(#Radio_ver) = 1
file$ = GetGadgetText(#String_search)
save$ = GetGadgetText(#String_saveto)
If file$ <> "" And save$ <> ""
If GetGadgetText(#String_pw) = GetGadgetText(#String_pw2)
preturn = FileKeyV(file$,save$,GetGadgetText(#String_pw),GetGadgetState(#Track_save))
If preturn = 1
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Die Datei wurde erfolgreich verschlüsselt!")
AddGadgetItem(#List_info, 0, "Erfolgreich:")
ElseIf preturn = 2
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Datei konnte nicht gelesen werden!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 3
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Datei konnte nicht erstellt werden!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 4
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Datei weist zuviele Verschlüsselungsrunden auf!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 5
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Bitte geben Sie ein Passwort an!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 6
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Verschlüsselung wurde erfolgreich abgebrochen!")
AddGadgetItem(#List_info, 0, "Erfolgreich:")
EndIf
If quick = 1
End
EndIf
Else
MessageRequester("Error","Die Passwörter stimmen nicht überein!")
EndIf
Else
MessageRequester("Error","Bitte geben sie den Dateipfad an!")
EndIf
DisableGadget(#String_search,0)
DisableGadget(#Button_search,0)
DisableGadget(#String_saveto,0)
DisableGadget(#Button_saveto,0)
DisableGadget(#Radio_ver,0)
DisableGadget(#Radio_ent,0)
DisableGadget(#Track_save,0)
DisableGadget(#String_pw,0)
DisableGadget(#String_pw2,0)
SetGadgetText(#Button_go,"Start")
ElseIf GetGadgetState(#Radio_ent) = 1
file$ = GetGadgetText(#String_search)
save$ = GetGadgetText(#String_saveto)
If file$ <> "" And save$ <> ""
preturn = FileKeyE(file$,save$,GetGadgetText(#String_pw))
If preturn = 1
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Die Datei wurde erfolgreich entschlüsselt!")
AddGadgetItem(#List_info, 0, "Erfolgreich:")
ElseIf preturn = 2
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Datei konnte nicht gelesen werden!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 3
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Datei konnte nicht erstellt werden!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 4
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Datei ist keine gültige -V- Datei!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 5
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Datei weist zuviele Verschlüsselungsrunden auf!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 6
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Bitte geben Sie ein Passwort an!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 7
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Passwort falsch!")
AddGadgetItem(#List_info, 0, "Error:")
ElseIf preturn = 8
ClearGadgetItemList(#List_info)
AddGadgetItem(#List_info, 0, "--------------------------------------------------")
AddGadgetItem(#List_info, 0, " Entschlüsselung wurde erfolgreich abgebrochen!")
AddGadgetItem(#List_info, 0, "Error:")
EndIf
Else
MessageRequester("Error","Bitte geben sie den Dateipfad an!")
EndIf
DisableGadget(#String_search,0)
DisableGadget(#Button_search,0)
DisableGadget(#String_saveto,0)
DisableGadget(#Button_saveto,0)
DisableGadget(#Radio_ver,0)
DisableGadget(#Radio_ent,0)
DisableGadget(#String_pw,0)
SetGadgetText(#Button_go,"Start")
EndIf
Case #Button_search
pfad$ = OpenFileRequester("Datei wählen...","","Alle Dateien (*.*)|*.*",0)
SetGadgetText(#String_search,pfad$)
If Right(pfad$,4) = ".-V-"
SetGadgetText(#String_saveto,Left(pfad$,Len(pfad$)-4))
Else
SetGadgetText(#String_saveto,pfad$+".-V-")
EndIf
Case #Button_saveto
If GetGadgetText(#String_search) = ""
pfad$ = SaveFileRequester("Speicherort wählen",GetFilePart(pfad$),"Alle Dateien (*.*)|*.*",0)
ElseIf Right(GetGadgetText(#String_search),4) = ".-V-"
pfad$ = SaveFileRequester("Speicherort wählen",GetFilePart(pfad$),"Alle Dateien (*.*)|*.*",0)
Else
pfad$ = SaveFileRequester("Speicherort wählen",GetFilePart(pfad$),"-V- Dateien (*.-V-)|*.-V-",0)
If Right(pfad$,4) <> ".-V-"
pfad$ = pfad$ + ".-V-"
EndIf
EndIf
If pfad$ = ".-V-"
pfad$ = GetGadgetText(#String_saveto)
EndIf
SetGadgetText(#String_saveto,pfad$)
Case #Track_save
SetGadgetText(#Text_save,Str(GetGadgetState(#Track_save)))
Case #Radio_ver
DisableGadget(#Track_save,0)
HideGadget(#Text_save,0)
DisableGadget(#String_pw2,0)
HideGadget(#Text_pw2,0)
Case #Radio_ent
DisableGadget(#Track_save,1)
HideGadget(#Text_save,1)
DisableGadget(#String_pw2,1)
HideGadget(#Text_pw2,1)
EndSelect
EndIf
Delay(1)
Until Quit