Moi, j'ai juste utilisé une clé XOR puis j'ai mélangé les caractères (tout simplement, j'ai pris le premier caractère puis le dernier, puis le second, puis l'avant-dernier, etc...)
Le cryptage en unicode est plus complexe car je combine les valeurs 0 des caractère simple (en unicode, un caractère est sur 2 octets, mais une caractère "classique" comme "a", "b", ... est composé de "a" suivant d'un "0", donc j'ai combiné pour gagner en longueur sur le texte crypté.
Voici mon code, et bravo à Dobro
Code : Tout sélectionner
Texte.s = "Bonjour les amis," + #crlf$ + "je vous adore !"
Procedure.s CrypText(Texte.s, Cle.l = 174)
Protected Cryptage.s
Protected Table.s
Table = "0123456789ABCDEF"
Table + "GHWJKLMNXPQRSTUV"
Protected NewList Valeur.l()
Protected NewList ValeurCryptee.s()
; Mise en forme des sauts de ligne
Texte = ReplaceString(Texte, #crlf$, Chr(10))
Texte = ReplaceString(Texte, Chr(13), Chr(10))
Texte_Longueur = StringByteLength(Texte)
For Index = 0 To Texte_Longueur - 1
AddElement(Valeur())
Valeur() = PeekB(@Texte + Index) & $FF
Next
ForEach Valeur()
; Valeur suivante
CompilerIf #PB_Compiler_Unicode
If NextElement(Valeur())
Valeur_Suivante = Valeur()
PreviousElement(Valeur())
Else
Valeur_Suivante = -1
EndIf
CompilerEndIf
; Cryptage
AddElement(ValeurCryptee())
CompilerIf #PB_Compiler_Unicode
If Valeur() = 10 And Valeur_Suivante = 0 ; Saut de ligne
ValeurCryptee() = #crlf$
NextElement(Valeur())
Else
ValeurCryptee() = Hex(Valeur() ! Cle)
If Valeur_Suivante = 0
ValeurCryptee() = Mid(Table, FindString(Table, Left(ValeurCryptee(), 1)) + 16, 1) + Right(ValeurCryptee(), 1)
NextElement(Valeur())
EndIf
EndIf
CompilerElse
If Valeur() = 10 ; Saut de ligne
ValeurCryptee() = #crlf$
Else
ValeurCryptee() = Hex(Valeur() ! Cle)
EndIf
CompilerEndIf
Next
Debut = 1
While ListSize(ValeurCryptee())
If Debut
FirstElement(ValeurCryptee())
Else
LastElement(ValeurCryptee())
EndIf
Cryptage + ValeurCryptee()
DeleteElement(ValeurCryptee())
Debut = 1 - Debut
Wend
ProcedureReturn Cryptage
EndProcedure
Procedure.s DecrypText(Texte.s, Cle.l = 174)
Protected Table.s
Table = "0123456789ABCDEF"
Table + "GHWJKLMNXPQRSTUV"
Protected NewList Valeur.l()
Protected NewList ValeurCryptee.s()
Protected Decryptage.s
; Mise en forme des sauts de ligne
Texte = ReplaceString(Texte, #crlf$, Chr(10))
Texte = ReplaceString(Texte, Chr(13), Chr(10))
Texte = ReplaceString(Texte, Chr(10), #crlf$)
Texte_Longueur = Len(Texte)
For Index = 1 To Texte_Longueur Step 2
Debut = Int((ListSize(ValeurCryptee()) + 1) / 2) - 1
If Debut >= 0
SelectElement(ValeurCryptee(), Debut)
EndIf
AddElement(ValeurCryptee())
ValeurCryptee() = Mid(Texte, Index, 2)
Next
ForEach ValeurCryptee()
If ValeurCryptee() = #crlf$
AddElement(Valeur())
Valeur() = 10
CompilerIf #PB_Compiler_Unicode
AddElement(Valeur())
Valeur() = 0
CompilerEndIf
Else
CompilerIf #PB_Compiler_Unicode
Valeur_Suivante = -1
Debut = FindString(Table, Left(ValeurCryptee(), 1))
If Debut > 16
ValeurCryptee() = Mid(Table, FindString(Table, Left(ValeurCryptee(), 1)) - 16, 1) + Right(ValeurCryptee(), 1)
Valeur_Suivante = 0
EndIf
CompilerEndIf
AddElement(Valeur())
Valeur() = Val("$" + ValeurCryptee()) ! Cle
CompilerIf #PB_Compiler_Unicode
If Valeur_Suivante >= 0
AddElement(Valeur())
Valeur() = 0
EndIf
CompilerEndIf
EndIf
Next
CompilerIf #PB_Compiler_Unicode
Decryptage = Space(ListSize(Valeur()) / 2)
CompilerElse
Decryptage = Space(ListSize(Valeur()))
CompilerEndIf
ForEach Valeur()
PokeB(@Decryptage + ListIndex(Valeur()), Valeur())
Next
Decryptage = ReplaceString(Decryptage, Chr(10), #crlf$)
ProcedureReturn Decryptage
EndProcedure
Debug Texte
Texte = CrypText(Texte)
Debug Texte
If CreateFile(0, "Temp.txt")
WriteString(0, Texte)
CloseFile(0)
RunProgram("Temp.txt")
Delay(1000)
DeleteFile("Temp.txt")
EndIf
Texte = DecrypText(Texte)
Debug Texte
If CreateFile(0, "Temp2.txt")
WriteString(0, Texte)
CloseFile(0)
RunProgram("Temp2.txt")
Delay(1000)
DeleteFile("Temp2.txt")
EndIf
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]