Read/ Write Power Encoded String

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Read/ Write Power Encoded String

Message par SPH »

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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read/ Write Power Encoded String

Message par Guimauve »

SPH a écrit :Ca aussi c'est trompeur :
Chacun des caractères est élevé en alternance au carrée ou au cube avant écriture sur fichier.
Ca fait trop "cryptographie" :P
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.

A+
Guimauve
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Read/ Write Power Encoded String

Message par SPH »

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'autresz combinaisons qui trompe aussi : chr(13)+chr(10).

Bref, ma question est : tu encode ta chaine pour eviter quel cas ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read/ Write Power Encoded String

Message par Guimauve »

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 ?
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.

L'astuce en question risque de décourager la grande majorité des gens. Un pirate va éclater de rire lorsqu'il comprendra comment la chaine de caractères est écrite dans le fichier. Donc oui il y a une certaine protection mais elle n'est pas très solide mais pour là ou je l'applique c'est largement suffisent.

Pour ton cas, ce que je te suggère c'est d'utiliser la version de Puckall Cipher que j'ai donnée sur le forum et de prendre la chaine de caractère en sortie puis l'enregistrer à l'aide des commandes que j'ai donnée sur ce post. Mais puisque tu parle de FTP, il faut faire attention avec le niveau de cryptage des données. Je sais par exemple que dans certain pays, le niveau de cryptage maximum légal est de 256 bits pour le transfert d'information par le WEB.

Pour des données locales il n'y a pas vraiment de limite, en tant qu'entité privé, nous ne sommes pas soumis aux lois d'accès à l'information. C'est pour cette raison que mon logiciel de gestion des comptes et mot de passe pour les différents forum sur le WEB c'est PuckallCipher à 8192Bits + Read/WriteMatrixEncodedString(). Quelqu'un qui voudrait décrypter le fichier en sortie du logiciel en question doit trouver 31 matrices 3x3, 31 matrices 4x4, trouver les matrices inverses (62 matrices à inverser) et placer le tout dans le bon ordre avant de s'attaquer au plat de résistance. C'est-à-dire un cryptage symétrique à 8192 bits (une clé 1024 caractères avec caractères non alpha-numérique) avant d'avoir la chance d'obtenir tout mes mots de passe. La première partie n'étant déjà pas si évidente que ça (si le code original contenant les matrices n'est pas connu), combiné avec la deuxième partie, je souhaite bonne chance aux courageux qui vont se lancer à l'assaut.

Si tu veux un exemple, donne des infos fictives de ce que tu veux faire je me ferai un plaisir de t'aider.

Voilà

A+
Guimauve
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Read/ Write Power Encoded String

Message par SPH »

Reponse tres complete. Merci :!:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Read/ Write Power Encoded String

Message par Ar-S »

Je croyais qu'en france on était limité aussi à 256bits. pour ce qui est du privée y'a pas de limite dis tu ?
Si c'est vrai c'est cool parce que de nombreux logiciels cryptent au moins en 1044 bits (genre drivecrypt)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read/ Write Power Encoded String

Message par Guimauve »

Bonjour à tous,

Voici une autre variante, le fonctionnement concernant la modification de l'encodage est le même. La seul différence est que les informations sont placées dans un bloc mémoire. Bloc mémoire qui sont ensuite compressés/Décompressés à l'aide de la librairie Packer. Pour ceux qui seraient intéressés bien sur.

Pour le moment je garde les noms actuels mais notez que ces noms ne sont pas vraiment appropriés à mon sens. J'ai bien une idée pour la fonction de lecture mais pas pour l'écriture

ReadPowerEncodedStringMemory() -> renommée --> CatchPowerEncodedString()
WritePowerEncodedStringMemory() -> renommée --> ???????PowerEncodedString()

Si quelqu'un à une idée, elle sera la bienvenue.

A+
Guimauve

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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Read/ Write Power Encoded String

Message par Backup »

ReadPowerEncodedStringMemory() -> renommée --> CatchPowerEncodedString()
WritePowerEncodedStringMemory() -> renommée --> ???????PowerEncodedString()
hum pourquoi pas

ReadEncodedStringMemory()
WriteEncodedStringMemory()


ou
ReadEncStrMem()
WriteEncStrMem()


variante
Read_Enc_StrMem()
Write_Enc_StrMem()


non ?

RESM()
WESM()
!! :lol:

parceque avoir a ce taper un roman , pour le nom d'une fonction .....
vive le copier-collé :)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read/ Write Power Encoded String

Message par Guimauve »

Dobro a écrit :
ReadPowerEncodedStringMemory() -> renommée --> CatchPowerEncodedString()
WritePowerEncodedStringMemory() -> renommée --> ???????PowerEncodedString()
hum pourquoi pas

ReadEncodedStringMemory()
WriteEncodedStringMemory()


ou
ReadEncStrMem()
WriteEncStrMem()


variante
Read_Enc_StrMem()
Write_Enc_StrMem()


non ?

RESM()
WESM()
!! :lol:

parceque avoir a ce taper un roman , pour le nom d'une fonction .....
vive le copier-collé :)
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.

De mon coté, c'est un logiciel qui écrit la grande majorité des codes alors pour lui, cela ne change pas grand chose. Je travaille présentement à l'adaptation de ce programme avec les nouveautés de la version 4.50 (Les Array, List et Map dans les structures) mais j'ai quelques difficultés techniques à corriger et je manque de temps. J'ai tout de même réussi à avancer depuis hier mais c'est loin d'être opérationnel pour le moment.

A+
Guimauve
Répondre