[RESOLU] Encrypter preferences

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[RESOLU] Encrypter preferences

Message par blendman »

salut

J'ai cherché une technique pour encrypter un fichier de type préférence ou ini.

je suis tombé sur ce lien :
http://www.purebasic.fr/french/viewtopi ... preference

Et j'ai essayé de l'adapter, mais ça ne marche pas, j'ai une erreur dans le code :

Code : Tout sélectionner

Procedure.s Encrypt(String.s)
  Result.s
  For i = 1 To Len(String)
    Cod.b = Asc(Mid(String, i, 1))
    Result = Result + Chr(Random(7) << 5 + (Cod & $F0) >> 3) + Chr(Random(3) + (Cod & $0F) << 3)
  Next
  ProcedureReturn Result
EndProcedure


Procedure.s Decrypt(String.s)
  Result.s
  For i = 1 To Len(String) Step 2
    Cod.b = (Asc(Mid(String, i, 1)) << 3) & $F0 + (Asc(Mid(String, i + 1, 1)) >> 3) & $0F
    Result + Chr(Cod)
  Next
  ProcedureReturn Result
EndProcedure



OpenPreferences("save.ini")
PreferenceGroup("general")
save= Random(15)
WritePreferenceInteger("vie",save)
save= Random(15)
WritePreferenceInteger("mana",save)
ClosePreferences()

If OpenFile(0,"save.ini")
  ReadFile(0,"save.ini")
  If CreateFile(1, "save_encrypted.ini")
    CreateFile(2,"save2.ini") ; juste pour vérifier que tout est correct (en non encrypté)
    While Eof(0) = 0
      tempoString$ = ReadString(0)
      WriteStringN(1,Encrypt(tempoString$))
      WriteStringN(2,tempoString$)
    Wend
    CloseFile(0) 
    CloseFile(1)
    CloseFile(2)
  EndIf  
EndIf

If OpenFile(1,"save_encrypted.ini")
  ReadFile(1,"save_encrypted.ini")
  If CreateFile(2,"save_decrypted.ini")
    While Eof(1) = 0
      a$ = ReadString(1)
      WriteStringN(2,Decrypt(a$))
    Wend
    CloseFile(1) 
    CloseFile(2) 
  EndIf  
EndIf
Sauriez-vous où est le problème ?

Sinon, savez-vous s'il existe une lib ou une technique pour encrypter/décrypter un fichier preference ?

merci :)
Dernière modification par blendman le jeu. 28/avr./2011 10:38, modifié 2 fois.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Encrypter preferences

Message par Geo Trouvpatou »

Salut.

Je ne sais pas si c'est ce que tu recherches, mais voici un lien (Voir le post de Dobro).
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Encrypter preferences

Message par Chris »

Tu peux toujours utiliser la librairie "Cyper" contenue dans PureBasic.

Voilà un code fait uniquement en recopiant les codes de l'aide et e,les assemblant.
Évidemment, ça reste à optimiser.

Tu lance avec le debugger, tu copies tout le résultat et tu le colles dans le bloc-notes pour voir ce que ça donne

Code : Tout sélectionner

file$ = "C:\Preferences.prefs"


;/ Exemple sur la librairie "Preferences"
If CreatePreferences(file$)
  PreferenceGroup("Global")
  WritePreferenceString("ApplicationName", "MP3 Player")
  WritePreferenceString("Version", "1.1b")
  
  PreferenceComment(" This is the Window dimension")
  PreferenceComment("")
  
  PreferenceGroup("Window")
  WritePreferenceLong ("WindowX", 123)
  WritePreferenceLong ("WindowY", 124)
  WritePreferenceFloat("WindowZ", -125.5)
  
  ClosePreferences()
EndIf


;/ Exemple sur la librairie "File"
If ReadFile(0, file$) 
  length = Lof(0)                            ; Lit la taille en octets du fichier 
  *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
  If *MemoryID
    bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
    ;Debug "Nombre d'octets lus: " + Str(bytes)
  EndIf
  CloseFile(0)
  f$ = PeekS(*MemoryID) : Debug f$
  Debug "________________________"
  Debug ""
EndIf


;/ Exemple sur la librairie "Cipher"
*CipheredString   = AllocateMemory(Len(f$)+1)
*DecipheredString = AllocateMemory(Len(f$)+1)
  
If AESEncoder(@f$, *CipheredString, Len(f$), ?Key, 128, ?InitializationVector)
  Debug "Ciphered: "
  Debug PeekS(*CipheredString)
  Debug "________________________"
  Debug ""
  
  AESDecoder(*CipheredString, *DecipheredString, Len(f$), ?Key, 128, ?InitializationVector)
  Debug "Deciphered: "
  Debug PeekS(*DecipheredString)
  Debug "________________________"
  Debug ""
  
EndIf

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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Encrypter preferences

Message par Chris »

La même version, mais un peu mieux codée.

J'ai repris le buffer existant plutôt que de le transférer dans une variable.

Code : Tout sélectionner

file$ = "C:\Preferences.prefs"


;/ Exemple sur la librairie "Preferences"
If CreatePreferences(file$)
  PreferenceGroup("Global")
  WritePreferenceString("ApplicationName", "MP3 Player")
  WritePreferenceString("Version", "1.1b")
  
  PreferenceComment(" This is the Window dimension")
  PreferenceComment("")
  
  PreferenceGroup("Window")
  WritePreferenceLong ("WindowX", 123)
  WritePreferenceLong ("WindowY", 124)
  WritePreferenceFloat("WindowZ", -125.5)
  
  ClosePreferences()
EndIf


;/ Exemple sur la librairie "File"
If ReadFile(0, file$) 
  length = Lof(0)                            ; Lit la taille en octets du fichier 
  *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
  If *MemoryID
    bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
    ;Debug "Nombre d'octets lus: " + Str(bytes)
  EndIf
  CloseFile(0)
  
  Debug PeekS(*MemoryID)
  
  Debug "________________________"
  Debug ""
EndIf


;/ Exemple sur la librairie "Cipher"
*CipheredString   = AllocateMemory(MemoryStringLength(*MemoryID)+1)
*DecipheredString = AllocateMemory(MemoryStringLength(*MemoryID)+1)
  
If AESEncoder(*MemoryID, *CipheredString, MemoryStringLength(*MemoryID), ?Key, 128, ?InitializationVector)
  Debug "Ciphered: "
  Debug PeekS(*CipheredString)
  Debug "________________________"
  Debug ""
  
  AESDecoder(*CipheredString, *DecipheredString, MemoryStringLength(*MemoryID), ?Key, 128, ?InitializationVector)
  Debug "Deciphered: "
  Debug PeekS(*DecipheredString)
  Debug "________________________"
  Debug ""
  
EndIf

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

Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Encrypter preferences

Message par blendman »

Geo Trouvpatou : merci pour le lien, je l'avais parcouru il y a quelques temps, et effectivement les méthodes expliquées sont intéressantes.

Chris : merci beaucoup pour ton exemple, je pense que je vais me servir de ça car ça m'a l'air de marcher vraiment bien !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Encrypter preferences

Message par Chris »

Par contre, ne me demande pas comment on calcule les datas qui sont en bas du code, j'en sais strictement rien.
Je ne sais même pas à quoi elle correspondent

Si Fred passe par là, il pourra peut-être nous éclairer.
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Encrypter preferences

Message par Fred »

La section 'Key', ca represente la... clé ! :). En gros c'est ce qu'il faut essayer de garder secret. Le vecteur d'initialisation, c'est à communiquer au décodeur, ça permet d'eviter que l'algo soit trop prévisible. Il devrait etre generé aleatoirement la premiere fois. Les deux sont des valeurs arbitraires.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Encrypter preferences

Message par blendman »

Merci des précisions ;)

Effectivement, j'avais un peu bidouillé ces datas et comme ça marchait quand même, j'en ai dédié que c'étaient des clefs pour l'encodage.

En tout cas, merci pour ces exemples, ça va m'être très utile.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Encrypter preferences

Message par Chris »

Pas de quoi!

Laisse moi ton adresse par MP, que je puisse t'envoyer la facture.
Après tout, qu'est-ce que c'est que 500 euros, quand on voit le prix du carburant.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Encrypter preferences

Message par blendman »

:D

Bon, j'ai bien repris ton code et j'ai tout compris :D.

Ca marche nickel.

Je me demandais si on pouvait l'adapter un peu pour encoder une image.

je suppose que oui, j'ai commencé à regarder, mais je n'ai pas encore trouvé, donc, si vous avez des pistes, je suis preneur :D.
Répondre