Salut sph.
Je ne suis pas sûr ordinateur pour essayer, mais j'ai demandé a GPT il m'a sortie ça :
Code : Tout sélectionner
Procedure.s XOR64(txt$, key$)
Protected result$, i, blockTxt.q, blockKey.q
If Len(txt$) <> Len(key$)
Debug "Erreur : La clé et le texte doivent avoir la même longueur"
ProcedureReturn ""
EndIf
For i = 1 To Len(txt$) Step 8
blockTxt = PeekQ(@txt$ + i - 1) ; Récupère un bloc de 8 octets du texte
blockKey = PeekQ(@key$ + i - 1) ; Récupère un bloc de 8 octets de la clé
PokeQ(@result$ + i - 1, blockTxt ! blockKey) ; Stocke le résultat XORisé
Next
ProcedureReturn result$
EndProcedure
txt1$ = "Salut la compagnie, ceci est un texte de 37 lettres "
mdp$ = "brouillage par XOr generé sur txt1$!!!!!!!!!!!!!!!!"
Debug XOR64(txt1$, mdp$) ; Chiffre le texte
Debug XOR64(XOR64(txt1$, mdp$), mdp$) ; Déchiffre
Je ne sais pas si c'est vraiment optimisé
Explication :
Une solution radicale est d'utiliser des opérations XOR sur des entiers 64 bits (Quad en PureBasic) pour traiter les données par blocs de 8 octets.
Blocs de 64 bits : On traite les données par tranches de 8 octets (Quad = 64 bits).
PeekQ & PokeQ : Ils permettent de manipuler les octets directement en mémoire, ce qui est plus rapide.
Double application de XOR : Chiffrer, puis appliquer à nouveau la clé redonne le texte original.
C'est une méthode beaucoup plus efficace que le traitement caractère par caractère. Elle améliore la performance tout en gardant la simplicité du XOR.
Vous si ça fonctionne et ça te convient
@++