celle ci est un dérivé du ROT13
le principe du rot13 est le suivant
on a un alphabet coupé en deux : (donc de 13 lettres )
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
et lorsqu'on veux ecrire une lettre on prends celle qui est en face
par exemple : Michel deviens ZVPUERY
si on regarde bien ça reviens a prendre la lettre 13 positions plus loin ...d'ou le terme de Rotation
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
pour le M on prends la lettre 13 positions plus loin, on tombe sur Z
et si nous avions pris la lettre N , et bien il aurai fallu une lettre apres le Z
dans ce cas, on prends la lettre du debut (on reviens a 1 ) donc la lettre A
ici j'ai étendu le truc en permettant un decalage de X position
ici j'utilise une rotation de 6 (un decalage en fait )
Code : Tout sélectionner
;***********************************************
;Titre :*ROTx
;Auteur : Zorro
;Date :04/08/2016
;Heure :10:26:12
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
Declare.s ROTx(nb,txt.s,mode)
debug " test : rotation de 6"
text$="si ma tante en avait, on l'appelerai tonton" ; texte a encoder
debug "text en clair :"+text$
text_encode$= ROTx(6,text$,1) ; on va effectuer une rotation de 6
debug "text encodé = "+ text_encode$
text_decode$=ROTx(6,text_encode$,0) ; on va effectuer une rotation de 6 inverse
debug "text décodé = "+text_decode$
Procedure.s ROTx(nb,txt.s,mode)
;Zorro
Alphabet.s="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
sortie.s=""
if nb>len(Alphabet.s):nb=nb-len(Alphabet.s):endif
if nb<1:nb=len(Alphabet.s)-nb:endif
select mode
Case 1 ; encode
For p=1 to Len(txt.s)
car.s=mid(txt.s,p,1)
pos=FindString(Alphabet.s,car.s)
if pos>0
pos=(pos+nb)% Len(Alphabet.s)
sortie.s=sortie.s+Mid(Alphabet.s,pos ,1)
else ; le caractere est inconnu de l'alphabet, on ne le code pas
sortie.s=sortie.s+car.s
Endif
Next p
Case 0 ;Decode
For p=1 to Len(txt.s)
car.s=mid(txt.s,p,1)
pos=FindString(Alphabet.s,car.s)
if pos>0
pos=(pos-nb) % Len(Alphabet.s)
sortie.s=sortie.s+Mid(Alphabet.s,pos,1)
else ; le caractere est inconnu de l'alphabet, on ne le code pas
sortie.s=sortie.s+car.s
Endif
Next p
EndSelect
ProcedureReturn sortie.s
EndProcedure
;