je voudrais encrypter les bytes d'un fichier1 avec un XOR et une clé , mettre le contenu dans un fichier2, pour après ré-appliquer le même XOR sur le fichier2 et écrire dans le fichier3, logiquement, je devrai me retrouver avec fichier1=fichier3
ben non... je pense fortement à la prise en charge de l'Unicode / Ascii qui pourrait provoquer cela ,malgré mes 'CompilerIf' ; j'ai testé avec une fonction RC4, j'ai le même soucis,
voyez vous ce que j'ai fait de pas bien ? l'ecriture des bytes dans les fichiers peut être, là je vois pas
Code : Tout sélectionner
Enumeration
#File1
#File2
#File3
EndEnumeration
Structure Bytes
b.b[0]
EndStructure
key.s = "jmg"
Filename.s = "test.txt"
Procedure XorMemory(*Memory.Bytes, MemoryLength.l, *Key.Bytes, KeyLength.l)
Protected XorMemory.l, i.l, j.l
If *Memory And *Key And MemoryLength > 0 And KeyLength > 0
While i < MemoryLength
If j = KeyLength : j = 0 : EndIf
*Memory\b[i] ! *Key\b[j]
i + 1
j + 1
Wend
XorMemory = #True
EndIf
ProcedureReturn XorMemory
EndProcedure
; ---ouverture du fichier - lecture des bytes et assignement en char hexa dans string$
OpenFile(#File1,Filename.s)
Repeat
string.s = string.s+Hex(ReadByte(#File1))
Until Eof(#File1)
CloseFile(#File1)
Debug string.s ; affichage des bytes du fichier , ok
CompilerIf #PB_Compiler_Unicode
length = Len(string.s) * 2
CompilerElse
length = Len(string.s)
CompilerEndIf
XorMemory(@string, length, @key, Len(key))
Debug string.s ; affichage des bytes encodés , ok
CreateFile(#File2 ,"encrypted.dat")
WriteData(#File2, @string, length)
CloseFile(#File2)
; retour aux bytes originaux et écriture dans nouveau fichier
XorMemory(@string, length, @key, Len(key))
Debug string.s ; afichage des bytes ....pas pareil ....
CreateFile(#File3 ,"decrypted.dat")
WriteData(#File3, @string, length)
CloseFile(#File3)
End