Page 1 sur 1

[RESOLU] Encrypter preferences

Publié : dim. 17/avr./2011 21:41
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 :)

Re: Encrypter preferences

Publié : dim. 17/avr./2011 22:08
par Geo Trouvpatou
Salut.

Je ne sais pas si c'est ce que tu recherches, mais voici un lien (Voir le post de Dobro).

Re: Encrypter preferences

Publié : dim. 17/avr./2011 22:13
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

Re: Encrypter preferences

Publié : dim. 17/avr./2011 22:24
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


Re: Encrypter preferences

Publié : dim. 17/avr./2011 22:28
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 !

Re: Encrypter preferences

Publié : dim. 17/avr./2011 22:42
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.

Re: Encrypter preferences

Publié : lun. 18/avr./2011 8:56
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.

Re: Encrypter preferences

Publié : lun. 18/avr./2011 11:55
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.

Re: Encrypter preferences

Publié : lun. 18/avr./2011 12:13
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.

Re: Encrypter preferences

Publié : lun. 18/avr./2011 20:37
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.