c'est une base de Xor, mais j'y ai ajouté l'aleatoire
grace au RandomSeed() on peut choisir une liste de numero aleatoire
ce qui fait que le Random() deviens prévisible
on peut ainsi se servir de cette particularité pour etre sur de retomber a chaque fois sur la meme liste de nombre "aléatoire"
apres avoir encodé en XOR, j'ajoute donc un chiffre pseudo aleatoire ce qui complique un peut plus le décryptage éventuel
Code : Tout sélectionner
Declare.s encode_text(de,passwrd.s,message.s)
Declare.s decode_text(de,passwrd.s,message.s)
txt.s="Pourtant , que la montagne est belle , comment peut on s'immaginer , en voyant un vol d'hirondelle, que l'automne viens d'arriver"
passwrd.s="purebasic power"
de=6 ; choisi une sequence aléatoire
Debug "le texte original :"+txt.s
debug ""
encode.s=Encode_text(de,passwrd.s,txt.s)
debug "le text Encodé :"+encode.s
Debug ""
de=6 ; il faut la mem sequence aleatoire pour le decodage
passwrd.s="purebasic power"
decode.s=decode_text(de,passwrd.s,encode.s)
debug "le texte Decodé :"+decode.s
Procedure.s Encode_text(de,passwrd.s,message.s)
; By Dobro
; de=initialisation du randomseed
; de2 = chaque lettre du mot de pass sert de generateur aleatoire
pos_pass=1
long_pass=len(passwrd.s)
RandomSeed(de)
chaine_codee$= ""
passwrd.s=Lcase(passwrd.s)
For position_caractere = 1 To Len(message.s)
Caractere$ = Mid(message.s, position_caractere, 1)
car_pass$ = Mid(passwrd.s, pos_pass, 1)
Caractere.c=asc(Caractere$)
car_pass.c=asc(car_pass$)
alea=random(8,1) ; ceci pourrai etre un parametre suplementaire dans l'interface , le 8 renvoi un chiffre entre 1 et 8 , ça pourrai etre un parametre de plus
code.c=(Caractere.c ! car_pass.c) +32
code.c=code.c+alea
; Respecte les retours a la ligne
If Caractere.c=10
code.c=10
ElseIf Caractere.c=13
Code.c=13
Endif
chaine_codee$=chaine_codee$+chr(code.c)
pos_pass=pos_pass+1
if pos_pass>long_pass
pos_pass=1
Endif
Next position_caractere
ProcedureReturn chaine_codee$
EndProcedure
Procedure.s Decode_text(de,passwrd.s,message.s)
; By Dobro
; de=initialisation du randomseed
; de2 = chaque lettre du mot de pass sert de generateur aleatoire
pos_pass=1
long_pass=len(passwrd.s)
passwrd.s=Lcase(passwrd.s)
RandomSeed(de)
For position_caractere = 1 To Len(message.s)
Caractere$ = Mid(message.s, position_caractere, 1)
car_pass$ = Mid(passwrd.s, pos_pass, 1)
Caractere.c=asc(Caractere$)
car_pass.c=asc(car_pass$)
alea=random(8,1) ; ceci pourrai etre un parametre suplementaire dans l'interface , le 8 renvoi un chiffre entre 1 et 8 , ça pourrai etre un parametre de plus
if Caractere.c>13
Caractere.c=Caractere.c-alea
Endif
code.c=(Caractere.c ! car_pass.c) +32
; Respecte les retours a la ligne
If Caractere.c=10
code.c=10
ElseIf Caractere.c=13
Code.c=13
Endif
chaine_decode.s= chaine_decode.s+chr(code.c)
pos_pass=pos_pass+1
if pos_pass>long_pass
pos_pass=1
Endif
Next position_caractere
ProcedureReturn chaine_decode.s
EndProcedure
;
;