Ca fait trop "cryptographie"Chacun des caractères est élevé en alternance au carrée ou au cube avant écriture sur fichier.

Ca fait trop "cryptographie"Chacun des caractères est élevé en alternance au carrée ou au cube avant écriture sur fichier.
C'est une simple opération mathématique au passage. Elle très exactement facultative. Dans mon c'est juste pour m'amuser un peu sans plus.SPH a écrit :Ca aussi c'est trompeur :Ca fait trop "cryptographie"Chacun des caractères est élevé en alternance au carrée ou au cube avant écriture sur fichier.
Pour éviter les problèmes du genre ASCII, UTF-8, UNICODE dans un premier temps. Une fois la chaine en mémoire, ça ne pose plus de problème. Dans un deuxième temps tout ceux qui pourrait être tenté de modifier manuellement un fichier sans passer par l'éditeur dédié pour la modification de ce fichier. Quelqu'un qui s'attend à trouver une chaine de caractères va être très déçu de voir qu'il n'y a rien à première vue qui ressemble à une chaine de caractères dans le fichier. Il n'y a que des entiers (.a, .b, .c, .w, .l, .q, ...), des Floats (.f) ou des Doubles (.d) d'écrit.SPH a écrit :Ok.
J'informe que j'ai failli posté il y a une ou 2 semaines sur une question qui est peut etre ce que tu desire faire. Ma question aurait ete : comment coder une chaine (une url ou un chemin de fichier par exemple) pour qu'elle ne soit pas lisible (ca c'est facile) mais surtout pour qu'on puisse la relire et la dechiffrer. Car en effet, crypter une chaine est facile mais le fait de la mettre par exemple dans un fichier et posé dans un ftp, ne permet pas toujours de la recuperer pour la decrypter. Il se passe quelques exception qui fait planter le decryptage. Par exemple, faire un xor de x sur x rend x=0. Hors, un zero dans un fichier annonce la fin du fichier. Il y a d'autres combinaisons qui trompe aussi : chr(13)+chr(10).
Bref, ma question est : tu encode ta chaine pour eviter quel cas ?
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Read/Write Power Encoded String Memory
; Nom du fichier : Read Write Power Encoded String Memory.pb
; Version du fichier : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 25-06-2010
; Mise à jour : 25-06-2010
; Code PureBasic : 4.50
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure.q IntegerSquareRoot(Value.q)
A.q = 0
B.q = 6074000999
Root.q = -1
While A <= B
D.q = (A + B) >> 1
D1.q = D * D
If Value > D1
A = D + 1
ElseIf Value < D1
B = D - 1
Else
Root = D
A = B + 1
EndIf
Wend
ProcedureReturn Root
EndProcedure
Procedure.q IntegerCubicRoot(Value.q)
A.q = 0
B.q = 4194303
Root.q = -1
While A <= B
D.q = (A + B) >> 1
D1.q = D * D * D
If Value > D1
A = D + 1
ElseIf Value < D1
B = D - 1
Else
Root = D
A = B + 1
EndIf
Wend
ProcedureReturn Root
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< WriteBinaryStringMemory <<<<<
Procedure.i WritePowerEncodedStringMemory(String.s)
StringLen.l = Len(String)
*Source.Character = @String
*MemoryBuffer.i = AllocateMemory(SizeOf(Long) + StringLen * SizeOf(Quad))
*PositionBuffer.i = *MemoryBuffer
PokeL(*PositionBuffer, StringLen)
*PositionBuffer + SizeOf(Long)
For Index = 1 To StringLen
Char01.c = PeekC(*Source)
If Index % 2 = 0
PokeQ(*PositionBuffer, Char01 * Char01 * Char01)
Else
PokeQ(*PositionBuffer, Char01 * Char01)
EndIf
*PositionBuffer + SizeOf(Quad)
*Source + SizeOf(Character)
Next
ProcedureReturn *MemoryBuffer
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< ReadBinaryStringMemory <<<<<
Procedure.s ReadPowerEncodedStringMemory(*MemoryBuffer.i)
*PositionBuffer.i = *MemoryBuffer
StringLen.l = PeekL(*PositionBuffer)
*PositionBuffer + SizeOf(Long)
String.s = Space(StringLen)
*Source.Character = @String
For Index = 1 To StringLen
If Index % 2 = 0
Char01.c = IntegerCubicRoot(PeekQ(*PositionBuffer))
Else
Char01 = IntegerSquareRoot(PeekQ(*PositionBuffer))
EndIf
PokeC(*Source, Char01)
*PositionBuffer + SizeOf(Quad)
*Source + SizeOf(Character)
Next
ProcedureReturn String
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! ATTENTION - CODE D'ESSAI !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Dim Texte.s(5)
Texte(0) = FormatDate("A=%yyyy, M= %mm, J=%dd - %hh:%ii:%ss", Date())
Texte(1) = "PureBasic 4.50 RC2"
Texte(2) = "FreeMat 4.0 (Similiaire à MatLab mais sans Simulink)"
Texte(3) = "PureBasic 4.50"
Texte(4) = "PureBasic is the best programming language, period !"
Texte(5) = "Linux Ubuntu 10.04 LTS x86_64"
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Notez que dans l'exemple ci-dessous"
Debug "; les chaines de caractères proviennent"
Debug "; d'un tableau mais on pourrait utiliser"
Debug "; le nom du fichier que l'on va"
Debug "; compresser et que l'on peut récupérer"
Debug "; par la suite. Soit pour nommer le"
Debug "; fichier à la décompression, soit pour"
Debug "; identifier un fichier précis dans "
Debug "; l'archive. Sachant qu'elle est compressée"
Debug "; Nom_fichier; Fichier; nom_fichier; fichier"
Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Textes originaux"
Debug ""
For Index = 0 To 5
Debug Texte(Index)
Next
If CreatePack("Test Power Encoded.pak")
For Index = 0 To 5
MemBuffer.i = WritePowerEncodedStringMemory(Texte(Index))
AddPackMemory(MemBuffer, MemorySize(MemBuffer), 9)
FreeMemory(MemBuffer)
Next
ClosePack()
EndIf
Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Depuis la décompression"
Debug ""
If OpenPack("Test Power Encoded.pak")
For Index = 0 To 5
MemBuffer = NextPackFile()
Debug ReadPowerEncodedStringMemory(MemBuffer)
Next
ClosePack()
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
hum pourquoi pasReadPowerEncodedStringMemory() -> renommée --> CatchPowerEncodedString()
WritePowerEncodedStringMemory() -> renommée --> ???????PowerEncodedString()
Du moment où les noms des procédures demeurent explicite, il n'y a pas vraiment de problème. Mais j'admets que pour ceux qui tape le code manuellement plus le nom est long et plus on a l'impression d'écrire un roman.Dobro a écrit :hum pourquoi pasReadPowerEncodedStringMemory() -> renommée --> CatchPowerEncodedString()
WritePowerEncodedStringMemory() -> renommée --> ???????PowerEncodedString()
ReadEncodedStringMemory()
WriteEncodedStringMemory()
ou
ReadEncStrMem()
WriteEncStrMem()
variante
Read_Enc_StrMem()
Write_Enc_StrMem()
non ?
RESM()
WESM() !!
parceque avoir a ce taper un roman , pour le nom d'une fonction .....
vive le copier-collé