Crypting/Datei schreiben
Verfasst: 09.07.2010 08:48
Hallo zusammen,
erstmal zur Warnung: ich bin relativ neu in Purebasic und versuche ein erstes Programm zu schreiben, welches eine per Parameter übergebene Datei ver- bzw entschlüssseln soll.
Prinzipiell funktioniert das soweit. Aber: wenn man eine Datei verschlüsselt und wieder entschlüsselt, so unterscheidet sich das Ergebnis leicht vom Ursprung - und zwar ist die entschlüsselte Datei länger, als die ursprunglich verschlüsselte.
Der Code basiert auf diesem Beispiel aus dem Forum. Ich kann mir den Fehler nicht erklären und bitte um Hilfe:
Besten Dank schon mal im Voraus.
Max
EDIT: Die Zeile war eigentlich
Hatte das nur ausprobiert, um zu gucken, ob das der Fehler war.... war's aber nicht 
erstmal zur Warnung: ich bin relativ neu in Purebasic und versuche ein erstes Programm zu schreiben, welches eine per Parameter übergebene Datei ver- bzw entschlüssseln soll.
Prinzipiell funktioniert das soweit. Aber: wenn man eine Datei verschlüsselt und wieder entschlüsselt, so unterscheidet sich das Ergebnis leicht vom Ursprung - und zwar ist die entschlüsselte Datei länger, als die ursprunglich verschlüsselte.
Der Code basiert auf diesem Beispiel aus dem Forum. Ich kann mir den Fehler nicht erklären und bitte um Hilfe:
Code: Alles auswählen
Procedure.s openEncodingFile(file.s)
Protected result.s, ff, *mem1
ff = ReadFile(#PB_Any, file)
If ff
length = Lof(ff)
*mem1 = AllocateMemory(length)
If *mem1
ReadData(ff, *mem1, length)
result = PeekS(*mem1)
FreeMemory(*mem1)
EndIf
CloseFile(ff)
Else
PrintN("Fehler lesen Datei")
EndIf
ProcedureReturn result
EndProcedure
Procedure.s decode(file.s)
Protected result.s, ff, *mem1, *mem2, length
ff = ReadFile(#PB_Any, file)
If ff
length = Lof(ff)
*mem1 = AllocateMemory(length)
*mem2 = AllocateMemory(length)
If *mem1 And *mem2
ReadData(ff, *mem1, length)
AESDecoder(*mem1, *mem2, length, ?Key, 128, ?InitializationVector)
result = PeekS(*mem2)
FreeMemory(*mem1) : FreeMemory(*mem2)
EndIf
CloseFile(ff)
Else
PrintN("Fehler lesen Datei")
EndIf
ProcedureReturn result
EndProcedure
Procedure memToFile(*mem, file.s)
Protected ff
ff = CreateFile(#PB_Any, file)
If ff
WriteData(ff, *mem, MemorySize(*mem)-1)
CloseFile(ff)
EndIf
EndProcedure
If OpenConsole()
paramCount = CountProgramParameters()
param$ = ProgramParameter()
e = (paramCount = 2 And param$ = "e")
d = (paramCount = 2 And param$ = "d")
If Not (e Or d )
PrintN("Incorrect syntax!")
Else
If (param$= "e" Or param$ = "ed")
File$ = ProgramParameter()
String$ = openEncodingFile(File$)
PrintN("encoding: " + String$)
*CipheredString = AllocateMemory(StringByteLength(String$) + SizeOf(character))
If AESEncoder(@String$, *CipheredString, StringByteLength(String$) + SizeOf(character), ?Key, 128, ?InitializationVector)
memToFile(*CipheredString, File$+".def")
FreeMemory(*CipheredString)
Debug "ok"
PrintN( "ok")
Else
Debug "nok"
PrintN( "nok")
EndIf
EndIf
If (param$ = "d" Or param$ = "ed")
PrintN("Decoding")
Debug "Decoding"
File$ = ProgramParameter()
Text$ = decode(File$)
memToFile(@Text$, File$+".dec")
Print("Done. Result: '")
Print(Text$)
PrintN("'")
Debug "Done. Result: '" + Text$ + "'"
EndIf
EndIf
EndIf ; Console Close
DataSection
Key:
Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
InitializationVector:
Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
EndDataSection
Max
EDIT: Die Zeile
Code: Alles auswählen
WriteData(ff, *mem, MemorySize(*mem)-1)
Code: Alles auswählen
WriteData(ff, *mem, MemorySize(*mem))
