Le texte n'est pas crypté mais codé. Le principe de fonctionnement pour le codage du texte est le suivant :
On divise la chaine à codé en bloc de 3 codes ascii pour former une série de Vecteur.
On fait le produit d'une matrice 3X3 inversible avec chacun des vecteurs.
Pour décoder le texte le fonctionnement est le suivant :
Avec la matrice inverse utilisée pour coder le texte on fait le produit MatriceInverse avec la série de vecteurs.
On restore le texte caractère par caratère pour la série de vecteurs.
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Prototype d'encodage de texte
; Fichier : Source principal
; Version : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 28-10-2007
; Mise à jour : 28-10-2007
; Codé avec PureBasic V4.10
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Hook
Counter.l
CurrentPtr.l
RootPtr.l
TailPtr.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetHookCounter(HookA, P_Counter)
HookA\Counter = P_Counter
EndMacro
Macro SetHookCurrentPtr(HookA, P_CurrentPtr)
HookA\CurrentPtr = P_CurrentPtr
EndMacro
Macro SetHookRootPtr(HookA, P_RootPtr)
HookA\RootPtr = P_RootPtr
EndMacro
Macro SetHookTailPtr(HookA, P_TailPtr)
HookA\TailPtr = P_TailPtr
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetHookCounter(HookA)
HookA\Counter
EndMacro
Macro GetHookCurrentPtr(HookA)
HookA\CurrentPtr
EndMacro
Macro GetHookRootPtr(HookA)
HookA\RootPtr
EndMacro
Macro GetHookTailPtr(HookA)
HookA\TailPtr
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset complet <<<<<
Macro ResetHook(HookA)
SetHookCounter(HookA, 0)
SetHookCurrentPtr(HookA, 0)
SetHookRootPtr(HookA, 0)
SetHookTailPtr(HookA, 0)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.015 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes : Matrix33L
;
; La matrice se présente sous la forme suivante :
;
; Éléments Matrice --> Index du tableau 1D
; 3x3 éléments --> 9 case de 0 à 8
;
; [e11, e12, e13] --> [0, 1, 2]
; [e21, e22, e23] --> [3, 4, 5]
; [e31, e32, e33] --> [6, 7, 8]
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Matrix33L
e11.l
e12.l
e13.l
e21.l
e22.l
e23.l
e31.l
e32.l
e33.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetMatrix33Le11(MatrixA, P_e11)
MatrixA\e11 = P_e11
EndMacro
Macro SetMatrix33Le12(MatrixA, P_e12)
MatrixA\e12 = P_e12
EndMacro
Macro SetMatrix33Le13(MatrixA, P_e13)
MatrixA\e13 = P_e13
EndMacro
Macro SetMatrix33Le21(MatrixA, P_e21)
MatrixA\e21 = P_e21
EndMacro
Macro SetMatrix33Le22(MatrixA, P_e22)
MatrixA\e22 = P_e22
EndMacro
Macro SetMatrix33Le23(MatrixA, P_e23)
MatrixA\e23 = P_e23
EndMacro
Macro SetMatrix33Le31(MatrixA, P_e31)
MatrixA\e31 = P_e31
EndMacro
Macro SetMatrix33Le32(MatrixA, P_e32)
MatrixA\e32 = P_e32
EndMacro
Macro SetMatrix33Le33(MatrixA, P_e33)
MatrixA\e33 = P_e33
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetMatrix33Le11(MatrixA)
MatrixA\e11
EndMacro
Macro GetMatrix33Le12(MatrixA)
MatrixA\e12
EndMacro
Macro GetMatrix33Le13(MatrixA)
MatrixA\e13
EndMacro
Macro GetMatrix33Le21(MatrixA)
MatrixA\e21
EndMacro
Macro GetMatrix33Le22(MatrixA)
MatrixA\e22
EndMacro
Macro GetMatrix33Le23(MatrixA)
MatrixA\e23
EndMacro
Macro GetMatrix33Le31(MatrixA)
MatrixA\e31
EndMacro
Macro GetMatrix33Le32(MatrixA)
MatrixA\e32
EndMacro
Macro GetMatrix33Le33(MatrixA)
MatrixA\e33
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur DivideByScalar : R = A / Scalar <<<<<
Macro DivideByScalarMatrix33L(MatrixR, MatrixA, Scalar)
SetMatrix33Le11(MatrixR, GetMatrix33Le11(MatrixA) / Scalar)
SetMatrix33Le12(MatrixR, GetMatrix33Le12(MatrixA) / Scalar)
SetMatrix33Le13(MatrixR, GetMatrix33Le13(MatrixA) / Scalar)
SetMatrix33Le21(MatrixR, GetMatrix33Le21(MatrixA) / Scalar)
SetMatrix33Le22(MatrixR, GetMatrix33Le22(MatrixA) / Scalar)
SetMatrix33Le23(MatrixR, GetMatrix33Le23(MatrixA) / Scalar)
SetMatrix33Le31(MatrixR, GetMatrix33Le31(MatrixA) / Scalar)
SetMatrix33Le32(MatrixR, GetMatrix33Le32(MatrixA) / Scalar)
SetMatrix33Le33(MatrixR, GetMatrix33Le33(MatrixA) / Scalar)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset complet <<<<<
Macro ResetMatrix33L(MatrixA)
SetMatrix33Le11(MatrixA, 0)
SetMatrix33Le12(MatrixA, 0)
SetMatrix33Le13(MatrixA, 0)
SetMatrix33Le21(MatrixA, 0)
SetMatrix33Le22(MatrixA, 0)
SetMatrix33Le23(MatrixA, 0)
SetMatrix33Le31(MatrixA, 0)
SetMatrix33Le32(MatrixA, 0)
SetMatrix33Le33(MatrixA, 0)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Copy : A = Source : B = Destination <<<<<
Macro CopyMatrix33L(MatrixA, MatrixB)
SetMatrix33Le11(MatrixB, GetMatrix33Le11(MatrixA))
SetMatrix33Le12(MatrixB, GetMatrix33Le12(MatrixA))
SetMatrix33Le13(MatrixB, GetMatrix33Le13(MatrixA))
SetMatrix33Le21(MatrixB, GetMatrix33Le21(MatrixA))
SetMatrix33Le22(MatrixB, GetMatrix33Le22(MatrixA))
SetMatrix33Le23(MatrixB, GetMatrix33Le23(MatrixA))
SetMatrix33Le31(MatrixB, GetMatrix33Le31(MatrixA))
SetMatrix33Le32(MatrixB, GetMatrix33Le32(MatrixA))
SetMatrix33Le33(MatrixB, GetMatrix33Le33(MatrixA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.031 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs ligne par ligne <<<<<
Macro SetMatrix33LLine1(MatrixA, P_e11, P_e12, P_e13)
SetMatrix33Le11(MatrixA, P_e11)
SetMatrix33Le12(MatrixA, P_e12)
SetMatrix33Le13(MatrixA, P_e13)
EndMacro
Macro SetMatrix33LLine2(MatrixA, P_e21, P_e22, P_e23)
SetMatrix33Le21(MatrixA, P_e21)
SetMatrix33Le22(MatrixA, P_e22)
SetMatrix33Le23(MatrixA, P_e23)
EndMacro
Macro SetMatrix33LLine3(MatrixA, P_e31, P_e32, P_e33)
SetMatrix33Le31(MatrixA, P_e31)
SetMatrix33Le32(MatrixA, P_e32)
SetMatrix33Le33(MatrixA, P_e33)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CofactorInverse <<<<<
Procedure CofactorInverseMatrix33L(*MatrixA.Matrix33L, *Inverse.Matrix33L)
CopyMatrix33L(*MatrixA, CopyA.Matrix33L)
SetMatrix33Le11(*Inverse, GetMatrix33Le22(CopyA) * GetMatrix33Le33(CopyA) - GetMatrix33Le23(CopyA) * GetMatrix33Le32(CopyA))
SetMatrix33Le12(*Inverse, GetMatrix33Le13(CopyA) * GetMatrix33Le32(CopyA) - GetMatrix33Le12(CopyA) * GetMatrix33Le33(CopyA))
SetMatrix33Le13(*Inverse, GetMatrix33Le12(CopyA) * GetMatrix33Le23(CopyA) - GetMatrix33Le13(CopyA) * GetMatrix33Le22(CopyA))
SetMatrix33Le21(*Inverse, GetMatrix33Le23(CopyA) * GetMatrix33Le31(CopyA) - GetMatrix33Le21(CopyA) * GetMatrix33Le33(CopyA))
SetMatrix33Le22(*Inverse, GetMatrix33Le11(CopyA) * GetMatrix33Le33(CopyA) - GetMatrix33Le13(CopyA) * GetMatrix33Le31(CopyA))
SetMatrix33Le23(*Inverse, GetMatrix33Le13(CopyA) * GetMatrix33Le21(CopyA) - GetMatrix33Le11(CopyA) * GetMatrix33Le23(CopyA))
SetMatrix33Le31(*Inverse, GetMatrix33Le21(CopyA) * GetMatrix33Le32(CopyA) - GetMatrix33Le22(CopyA) * GetMatrix33Le31(CopyA))
SetMatrix33Le32(*Inverse, GetMatrix33Le12(CopyA) * GetMatrix33Le31(CopyA) - GetMatrix33Le11(CopyA) * GetMatrix33Le32(CopyA))
SetMatrix33Le33(*Inverse, GetMatrix33Le11(CopyA) * GetMatrix33Le22(CopyA) - GetMatrix33Le12(CopyA) * GetMatrix33Le21(CopyA))
Cofactor_Determinant.l = GetMatrix33Le11(CopyA) * GetMatrix33Le11(*Inverse) + GetMatrix33Le12(CopyA) * GetMatrix33Le21(*Inverse) + GetMatrix33Le13(CopyA) * GetMatrix33Le31(*Inverse)
If Cofactor_Determinant <> 0.0
DivideByScalarMatrix33L(*Inverse, *Inverse, Cofactor_Determinant)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Vector3L
i.l
j.l
k.l
NextPtr.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetVector3Li(VectorA, P_i)
VectorA\i = P_i
EndMacro
Macro SetVector3Lj(VectorA, P_j)
VectorA\j = P_j
EndMacro
Macro SetVector3Lk(VectorA, P_k)
VectorA\k = P_k
EndMacro
Macro SetVector3LNextPtr(VectorA, P_NextPtr)
VectorA\NextPtr = P_NextPtr
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetVector3Li(VectorA)
VectorA\i
EndMacro
Macro GetVector3Lj(VectorA)
VectorA\j
EndMacro
Macro GetVector3Lk(VectorA)
VectorA\k
EndMacro
Macro GetVector3LNextPtr(VectorA)
VectorA\NextPtr
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset complet <<<<<
Macro ResetVector3L(VectorA)
SetVector3Li(VectorA, 0)
SetVector3Lj(VectorA, 0)
SetVector3Lk(VectorA, 0)
SetVector3LNextPtr(VectorA, 0)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le Constructeur <<<<<
Procedure.l CreateNewVector3L()
*NewVector3L.Vector3L = AllocateMemory(SizeOf(Vector3L))
If *NewVector3L = #Null
MessageRequester("Fatal Error", "CreateNewVector3L() - Impossible to Allocate Memory !")
End
EndIf
ProcedureReturn *NewVector3L
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Ajout d'un Maillon à la chaine <<<<<
Procedure.l AddLinkToChainOfVector3L(*Hook.Hook)
*NewVector3L.Vector3L = CreateNewVector3L()
If GetHookRootPtr(*Hook) = #Null
SetHookRootPtr(*Hook, *NewVector3L)
Else
*Tail.Vector3L = GetHookTailPtr(*Hook)
SetVector3LNextPtr(*Tail, *NewVector3L)
EndIf
SetHookTailPtr(*Hook, *NewVector3L)
SetHookCurrentPtr(*Hook, *NewVector3L)
SetHookCounter(*Hook, GetHookCounter(*Hook) + 1)
ProcedureReturn *NewVector3L
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Private - Destruction récursive de la chaine <<<<<
Procedure PrivateDestroyChainOfVector3L(*VectorA.Vector3L)
*NextVector3L.Vector3L = GetVector3LNextPtr(*VectorA)
ResetVector3L(*VectorA)
FreeMemory(*VectorA)
If *NextVector3L <> #Null
PrivateDestroyChainOfVector3L(*NextVector3L)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Destruction de la chaine <<<<<
Procedure DestroyChainOfVector3L(*Hook.Hook)
*RootVector3L.Vector3L = GetHookRootPtr(*Hook)
If *RootVector3L <> #Null
PrivateDestroyChainOfVector3L(*RootVector3L)
ResetHook(*Hook)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture fichier Binaire <<<<<
Procedure ReadChainOfVector3L(FileID.l, *Hook.Hook)
LinkMax.l = ReadLong(FileID)
For LinkIndex = 0 To LinkMax - 1
*VectorA.Vector3L = AddLinkToChainOfVector3L(*Hook)
SetVector3Li(*VectorA, ReadLong(FileID))
SetVector3Lj(*VectorA, ReadLong(FileID))
SetVector3Lk(*VectorA, ReadLong(FileID))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture fichier Binaire <<<<<
Procedure WriteChainOfVector3L(FileID.l, *Hook.Hook)
WriteLong(FileID, GetHookCounter(*Hook))
*VectorA.Vector3L = GetHookRootPtr(*Hook)
While *VectorA <> #Null
WriteLong(FileID, GetVector3Li(*VectorA))
WriteLong(FileID, GetVector3Lj(*VectorA))
WriteLong(FileID, GetVector3Lk(*VectorA))
*VectorA = GetVector3LNextPtr(*VectorA)
Wend
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.047 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure EncodeText
CodeMatrixID.b
ChainOfVector.Hook ; Vector3L
CodeMatrix.Matrix33L[4]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetEncodeTextCodeMatrixID(EncodeTextA, P_CodeMatrixID)
EncodeTextA\CodeMatrixID = P_CodeMatrixID
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetEncodeTextCodeMatrixID(EncodeTextA)
EncodeTextA\CodeMatrixID
EndMacro
Macro GetEncodeTextChainOfVector(EncodeTextA)
EncodeTextA\ChainOfVector
EndMacro
Macro GetEncodeTextCodeMatrix(EncodeTextA, Index)
EncodeTextA\CodeMatrix[Index]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset complet <<<<<
Macro ResetEncodeText(EncodeTextA)
SetEncodeTextCodeMatrixID(EncodeTextA, 0)
DestroyChainOfVector3L(GetEncodeTextChainOfVector(EncodeTextA))
For Index = 0 To 3
ResetMatrix33L(GetEncodeTextCodeMatrix(EncodeTextA, Index))
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture fichier Binaire <<<<<
Procedure ReadEncodeText(FileID.l, *EncodeTextA.EncodeText)
SetEncodeTextCodeMatrixID(*EncodeTextA, ReadByte(FileID))
ReadChainOfVector3L(FileID, GetEncodeTextChainOfVector(*EncodeTextA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture fichier Binaire <<<<<
Procedure WriteEncodeText(FileID.l, *EncodeTextA.EncodeText)
WriteByte(FileID, GetEncodeTextCodeMatrixID(*EncodeTextA))
WriteChainOfVector3L(FileID, GetEncodeTextChainOfVector(*EncodeTextA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.016 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure InitializeEncodeText(*EncodeTextA.EncodeText)
; Sélection aléatoire d'une matrice d'encodage
SetEncodeTextCodeMatrixID(*EncodeTextA, Random(3))
; Matrice d'encodage ID = 0
SetMatrix33LLine1(GetEncodeTextCodeMatrix(*EncodeTextA, 0), 1, 2, 2)
SetMatrix33LLine2(GetEncodeTextCodeMatrix(*EncodeTextA, 0), 3, 1, 0)
SetMatrix33LLine3(GetEncodeTextCodeMatrix(*EncodeTextA, 0), 1, 1, 1)
; Matrice d'encodage ID = 2
SetMatrix33LLine1(GetEncodeTextCodeMatrix(*EncodeTextA, 2), 2, 1, 0)
SetMatrix33LLine2(GetEncodeTextCodeMatrix(*EncodeTextA, 2), -1, 1, 2)
SetMatrix33LLine3(GetEncodeTextCodeMatrix(*EncodeTextA, 2), 3, 2, 1)
; Matrice Inverse de la matrice ID = 0
CofactorInverseMatrix33L(GetEncodeTextCodeMatrix(*EncodeTextA, 0), GetEncodeTextCodeMatrix(*EncodeTextA, 1))
; Matrice Inverse de la matrice ID = 2
CofactorInverseMatrix33L(GetEncodeTextCodeMatrix(*EncodeTextA, 2), GetEncodeTextCodeMatrix(*EncodeTextA, 3))
EndProcedure
Procedure TransformTextToEncodeText(*EncodeTextA.EncodeText, Texte.s)
Nb_Car.l = Len(Texte)
For Index = 0 To Nb_Car Step 3
*VectorA.Vector3L = AddLinkToChainOfVector3L(GetEncodeTextChainOfVector(*EncodeTextA))
SetVector3Li(*VectorA, Asc(Mid(Texte, Index + 1, 1)))
SetVector3Lj(*VectorA, Asc(Mid(Texte, Index + 2, 1)))
SetVector3Lk(*VectorA, Asc(Mid(Texte, Index + 3, 1)))
Temp_I = GetMatrix33Le11(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Li(*VectorA) + GetMatrix33Le12(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Lj(*VectorA) + GetMatrix33Le13(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Lk(*VectorA)
Temp_J = GetMatrix33Le21(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Li(*VectorA) + GetMatrix33Le22(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Lj(*VectorA) + GetMatrix33Le23(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Lk(*VectorA)
Temp_K = GetMatrix33Le31(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Li(*VectorA) + GetMatrix33Le32(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Lj(*VectorA) + GetMatrix33Le33(GetEncodeTextCodeMatrix(*EncodeTextA, GetEncodeTextCodeMatrixID(*EncodeTextA))) * GetVector3Lk(*VectorA)
SetVector3Li(*VectorA, Temp_I)
SetVector3Lj(*VectorA, Temp_J)
SetVector3Lk(*VectorA, Temp_K)
Next
EndProcedure
Procedure.s RestoreTextFromEncodeText(*EncodeTextA.EncodeText)
; En fonction de la matrice utilisé à l'encodage, il faut sélectionner
; la matrice inverse correspondante.
; La matrice 0 est l'inverse de la 1
; La matrice 1 est l'inverse de la 0
; La matrice 2 est l'inverse de la 3
; La matrice 3 est l'inverse de la 2
If GetEncodeTextCodeMatrixID(*EncodeTextA) = 0
CodeMatrixID = 1
ElseIf GetEncodeTextCodeMatrixID(*EncodeTextA) = 1
CodeMatrixID = 0
ElseIf GetEncodeTextCodeMatrixID(*EncodeTextA) = 2
CodeMatrixID = 3
ElseIf GetEncodeTextCodeMatrixID(*EncodeTextA) = 3
CodeMatrixID = 2
EndIf
*VectorA.Vector3L = GetHookRootPtr(GetEncodeTextChainOfVector(*EncodeTextA))
While *VectorA <> #Null
Temp_I = GetMatrix33Le11(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Li(*VectorA) + GetMatrix33Le12(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Lj(*VectorA) + GetMatrix33Le13(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Lk(*VectorA)
Temp_J = GetMatrix33Le21(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Li(*VectorA) + GetMatrix33Le22(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Lj(*VectorA) + GetMatrix33Le23(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Lk(*VectorA)
Temp_K = GetMatrix33Le31(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Li(*VectorA) + GetMatrix33Le32(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Lj(*VectorA) + GetMatrix33Le33(GetEncodeTextCodeMatrix(*EncodeTextA, CodeMatrixID)) * GetVector3Lk(*VectorA)
Text.s = Text + Chr(Temp_I) + Chr(Temp_J) + Chr(Temp_K)
*VectorA = GetVector3LNextPtr(*VectorA)
Wend
ProcedureReturn Text
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< CODE DE DÉMONSTRATION <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
InitializeEncodeText(EncodeText.EncodeText)
InitializeEncodeText(EncodeText2.EncodeText)
TransformTextToEncodeText(EncodeText, "Les carottes sont cuites à point !")
If CreateFile(0, "EncodedText.dat")
WriteEncodeText(0, EncodeText)
EndIf
If ReadFile(0, "EncodedText.dat")
ReadEncodeText(0, EncodeText2)
EndIf
Debug RestoreTextFromEncodeText(EncodeText2)
ResetEncodeText(EncodeText)
ResetEncodeText(EncodeText2)
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<