Procedure Encore/decode Xor Aleatoire

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Procedure Encore/decode Xor Aleatoire

Message par Zorro »

j'avais fais ce code, il y a pas mal de temps

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
; 
; 
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"