Il s'agit de ma fonction d'encodage RC4 ... dans certain cas si j'encode un texte avec le mot de passe, et qu'ensuite je le decode, il comporte des erreurs.
voici le code qui vous montre le souci. a la fin du code j'ai une boucle ou je fabrique un texte aléatoirement et j'affiche dans le debugger lorsque le text decrypter de correspond au texte d'origine.
N'importe quel conseille, coup de pousse est le bienvenu
Merci
Code : Tout sélectionner
Structure prefs
cle.s
EndStructure
Global Prefs.prefs
;Function pour créer un mot de passe
Procedure.s mkpass(password_length)
Protected chars$,pass$,position.l,char_case.l,a.l
chars$="abcdefghijklmnopqrstuvwxyz1234567890" ; possible characters, keep these lcase
For a=1 To password_length
Select Random(1) ; 0 = char, 1 = digit
Case 1 ; is digit
pass$+Str(Random(9))
Case 0 ; is character
position=Random(Len(chars$)) ; random character selector
char_case = Random(10)
If char_case<5 ; less than 5 is ucase
pass$+UCase(Mid(chars$,position,1))
Else
pass$+Mid(chars$,position,1)
EndIf
EndSelect
Next
ProcedureReturn pass$
EndProcedure
Procedure.s RC4(Inp.s, Key.s)
;encoded.s = RC4("Message", "Password")
;decoded.s = RC4(encoded, "Password")
Protected i.l,j.l,t.l,x.l,temp.w,Y.w,Outp.s
Dim S.w(255)
Dim K.w(255)
i.l=0: j.l=0: t.l=0: x.l=0
temp.w=0: Y.w=0
Outp.s=""
For i = 0 To 255
S(i) = i
Next
j = 1
For i = 0 To 255
If j > Len(key)
j = 1
EndIf
K(i) = Asc(Mid(key, j, 1))
j = j + 1
Next i
j = 0
For i = 0 To 255
j = (j + S(i) + K(i)) & 255
temp = S(i)
S(i) = S(j)
S(j) = temp
Next i
i = 0
j = 0
For x = 1 To Len(Inp)
i = (i + 1) & 255
j = (j + S(i)) & 255
temp = S(i)
S(i) = S(j)
S(j) = temp
t = (S(i) + (S(j) & 255)) & 255
Y = S(t)
Outp = Outp + Chr(Asc(Mid(Inp, x, 1))!Y)
Next
ProcedureReturn Outp
EndProcedure
;********************
;Le choix du système de cryptage
;********************
Procedure.s CrypteText(Text.s)
ProcedureReturn RC4(Text.s, Prefs\Cle)
EndProcedure
Procedure.s DecrypteText(Text.s)
ProcedureReturn RC4(Text.s, Prefs\Cle)
EndProcedure
prefs\Cle="monmotdepasse"
For z=1 To 2000
;Debug "--"+Str(z)+"--"
txt.s=mkpass(Random(4)+2)
test.s=CrypteText(txt)
result.s=DecrypteText(test)
;Debug txt+" "+test+" "+result
If txt<>result
Debug Str(z)+" "+txt+" "+test+" "+result
EndIf
Next