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
Bon, j'ai bien repris ton code et j'ai tout compris

.
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

.