Page 2 sur 2

Re: Procedure Vigenere

Publié : mer. 03/août/2016 15:23
par venom
rooo.... "En tout cas on est paré avec toutes ces codes décryptage by ALL" :D






@++

Re: Procedure Vigenere

Publié : mer. 03/août/2016 17:44
par Zorro
arf ..
je viens d'effectuer une toute petite modif mais essentiel

je m'en suis rendu compte en le mettant a l'epreuve :)
maintenant c'est du beton :)

Re: Procedure Vigenere

Publié : jeu. 04/août/2016 9:23
par PAPIPP
Bravo Dobro pour ton code Vegener avec un mot de passe allongé

Remarque pour l’amélioration du mot de passe allongé ;
J'ai générer un randomseed(x) lié au mot de passe en effet
randomSeed(8) suivi de random(max,min) va générer quelque soit le mot de passe toujours la même suite d’indices pour aller chercher dans mot de passe le caractère à ajouter.
Afin d’améliorer cette suite d’indices semi-aléatoire on peut lier le départ de cette suite non pas d’une façon fixe RandomSeed(8) mais en la liant à la longueur du mot de passe et à la somme des caractères du mot de passe.

j'ai aussi généré une table alphabet mélangée à partir de ce randomseed(x)
et j'ai complété alphabet de tous les caractères que l'on trouve sur le clavier, j'espère n"en avoir pas oubliè.

Ce code n'est pas optimisé on peut encore l'améliorer.

Code : Tout sélectionner


; Vigenere Codec
Declare.s rallonge_password(pass.s,longueur_pass)
Declare.s vigenere(txt.s,pass.s,mode)
txt.s="il etait un petit navire, qui n'avait ja ja jamais navigué , qui n'avait ja ja jamais navigué hoé hoé !"
pass.s="hello , le soleil brille brille brille ."
; pass.s="au  claire  de la  lune mon ami pierrot."

;************************************************************
;**** génére un départ de random lié au mot de pâsse
; pour ne pas génerer les même indices pos avec des pw différents il suffit de lier le début du randomseed au mot de passe  exemple longueur + somme des caractères 
Global valsomme.l, alphabet.s
  long= Len(pass.s)
  valsomme=long
  For i=1 To long
    car.s=Mid(pass.s,i,1)
    valsomme+PeekC(@car) ;; valable en unicode et en ASCII
  Next 
  
    ;**************************************************************************************************************************
  ;;Partie permettant de générer un alphabet mélangé avec un randomseed(x) x est la valeur globale de valsomme
  Structure Alpha 
    StructureUnion 
      alphabet.s{200}
      carac.c[200]
    EndStructureUnion  
  EndStructure
  Define alph.alpha\alphabet="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,;:!<>?./§&é'(-è_çà)=~#{[|`\^@]}+°%ù*µ^$£"
  Debug alph\alphabet
  longalpha=Len(alph\alphabet)
;   Debug _s(longalpha)
  RandomSeed(valsomme) 
  For i=0 To longalpha-1
    rdll=Random(longalpha-1,1) 
    Swap alph\carac[i], alph\carac[rdll]
  Next 
;   Debug  _s(alph\alphabet) 
;   Alphabet.s="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  Alphabet.s=alph\alphabet; ce transfert permet de ne pas modifier le reste du programme mais le code n'est pas optimisé
  
  ;*******************************************************************************************************************************

;************************************************************

Debug "Phrase en clair de depart :"+txt.s
Debug "mot de pass :"+pass.s
Debug ""
mode=1 ; encode
encode.s=Vigenere(txt.s,pass.s,mode)
Debug "phrase encodée :"+encode.s
Debug ""
mode=0 ;decode
decode.s=Vigenere(encode.s,pass.s,mode)
Debug "phrase décodée :"+decode.s

Procedure.s rallonge_password(pass.s,longueur_pass)
  ; By Zorro
  ; le but de cette procedure, est de rallonger un mot de pass en prenant des lettres de ce mot de pass
  ; de la sorte, on peut avoir un mot de pass aussi long que le truc qu'on encode/decode
  ; ce qui garantie un quasi inviolabilité du codage :o)
  Protected passwrd.s,long
  long= Len(pass.s)-1 
  RandomSeed(valsomme) ; <<<< ceci pour etre sur qu'avec des mots de passe différents  avoir des indices différents (un peu plus difficile à craker ..
  
  If long<longueur_pass            
    manque=(longueur_pass-long)-1
    passwrd.s=pass.s
    For y= 1 To manque
      pos=Random(long,1)  
;       Debug "pos="+Str(pos)
      passwrd.s=passwrd.s+Mid(pass.s,pos,1)               
    Next y
    ProcedureReturn passwrd.s
  Else
    ProcedureReturn pass.s
  EndIf
EndProcedure
Procedure.s Vigenere(txt.s,pass.s,mode)
         ; By Zorro
         ; ici j'utilise un alphabet tres classique, mais le mieux serai de melanger les lettres de l'alphabet
         ; pour ne pas rendre prévisible l'emplacement de telle ou telle lettre ;o)
         ; tout caractere n'etant pas dans l'alphabet , est utilisé telquel (je prends son code Ascii)
         ; j'ai Ajouté l'espace, pour  ne pas avoir une découpe des mots qui aparaitrait dans le resultat codé :o)
         Alphabet.s="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
         sortie.s=""
         If Len(pass.s)<Len(txt.s)
            pass.s=rallonge_password(pass.s,Len(txt.s))
         Else
            pass.s=Left(pass.s,Len(txt.s))
         EndIf
         Select mode
         Case 1 ; Action encodage            
            For p=1 To Len(txt.s)
               car_clair=FindString(Alphabet.s,Mid(txt.s,p,1))
               car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))
               car_encode=(car_clair+car_pass)
               If car_encode >Len(Alphabet.s)
                  car_encode=car_encode-Len(Alphabet.s)
               EndIf
               If car_clair=0               
                  sortie.s=sortie.s+Mid(txt.s,p,1)
               Else
                  sortie.s=sortie.s+Mid(Alphabet.s,car_encode,1)
               EndIf
               
            Next p
         Case 0 ; Action décodage
            For p=1 To Len(txt.s)
               car_clair=FindString(Alphabet.s,Mid(txt.s,p,1))
               car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))   
               
               car_decode=(car_clair-car_pass)
               If car_decode<1:car_decode=Len(Alphabet.s)+car_decode   :EndIf
               If car_clair=0                  
                  sortie.s=sortie.s+Mid(txt.s,p,1)
               Else
                  sortie.s=sortie.s+Mid(Alphabet.s,car_decode,1)
               EndIf
            Next p
            
         EndSelect
         
         ProcedureReturn sortie.s
      EndProcedure



Re: Procedure Vigenere

Publié : jeu. 04/août/2016 9:31
par Zorro
une belle amélioration en effet :)

Re: Procedure Vigenere

Publié : jeu. 04/août/2016 10:19
par JohnJohnsonSHERMAN
Parfait ces améliorations... comme ca j'aurais pas a me casser la tête dessus plus tard :mrgreen:

Re: Procedure Vigenere

Publié : ven. 19/août/2016 14:51
par Zorro
Attention , j'ai corrigé un bug sur la procedure Vigenere du premier message

dans certain cas ça ne marchait pas ...... :oops:

maintenant, c'est beton !! :)

@PAPIPP ou un modo
si vous pouviez remplacer la procedure Vigenere de Papipp par celle du premier message ou celle-ci

Code : Tout sélectionner

Procedure.s Vigenere(txt.s,pass.s,mode)
			; By Zorro
			; ici j'utilise un alphabet tres classique, mais le mieux serai de melanger les lettres de l'alphabet
			; pour ne pas rendre prévisible l'emplacement de telle ou telle lettre ;o)
			; tout caractere n'etant pas dans l'alphabet , est utilisé telquel (je prends son code Ascii)
			; j'ai Ajouté l'espace, pour  ne pas avoir une découpe des mots qui aparaitrait dans le resultat codé :o)
			Alphabet.s="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
			sortie.s=""
			If Len(pass.s)<Len(txt.s)
				pass.s=rallonge_password(pass.s,Len(txt.s))
			Else
				pass.s=Left(pass.s,Len(txt.s))
			EndIf
			Select mode
			Case 1 ; Action encodage				
				For p=1 To Len(txt.s)
					car_clair=FindString(Alphabet.s,Mid(txt.s,p,1)) 
					car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))
					car_encode=(car_clair+car_pass)
					If car_encode >Len(Alphabet.s)
						car_encode=car_encode-Len(Alphabet.s)
					EndIf
					If car_clair=0					
						sortie.s=sortie.s+Mid(txt.s,p,1)
					Else
						sortie.s=sortie.s+Mid(Alphabet.s,car_encode,1)
					EndIf
					
				Next p
			Case 0 ; Action décodage
				For p=1 To Len(txt.s)
					car_clair=FindString(Alphabet.s,Mid(txt.s,p,1))
					car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))	
					
					car_decode=(car_clair-car_pass) 
					If car_decode<1:car_decode=Len(Alphabet.s)+car_decode	:EndIf
					If car_clair=0						
						sortie.s=sortie.s+Mid(txt.s,p,1)
					Else
						sortie.s=sortie.s+Mid(Alphabet.s,car_decode,1)
					EndIf
				Next p
				
			EndSelect
			
			ProcedureReturn sortie.s
		EndProcedure

ma modification remplace en fait :

Code : Tout sélectionner

Case 1 ; Action encodage
     
      For p=1 To Len(txt.s)
        car_clair=FindString(Alphabet.s,Mid(txt.s,p,1))
        car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))
        car_encode=(car_clair+car_pass)% Len(Alphabet.s)               
        If car_clair=0
          car_clair=Asc(Mid(txt.s,p,1))
          sortie.s=sortie.s+Chr(car_clair)
        Else
          sortie.s=sortie.s+Mid(Alphabet.s,car_encode,1)
        EndIf
       
      Next p
par cela :

Code : Tout sélectionner

Case 1 ; Action encodage				
				For p=1 To Len(txt.s)
					car_clair=FindString(Alphabet.s,Mid(txt.s,p,1)) 
					car_pass=FindString(Alphabet.s,Mid(pass.s,p,1))
					car_encode=(car_clair+car_pass)
					If car_encode >Len(Alphabet.s)
						car_encode=car_encode-Len(Alphabet.s)
					EndIf
					If car_clair=0					
						sortie.s=sortie.s+Mid(txt.s,p,1)
					Else
						sortie.s=sortie.s+Mid(Alphabet.s,car_encode,1)
					EndIf
					
				Next p

le

Code : Tout sélectionner

% Len(Alphabet.s) 
met la lose !!

Re: Procedure Vigenere

Publié : ven. 19/août/2016 18:03
par JohnJohnsonSHERMAN
Merci de la correction Dobro, j'ai plus trop le temps de me pencher sur les codes de Vigenére en ce moment, mais je vais tester tout ca :P

Re: Procedure Vigenere

Publié : ven. 19/août/2016 18:14
par Zorro
j'ai du apporter une correction, car je suis en train d'utiliser cette procedure avec EPB
et, du coup ça la met bien en epreuve :)

pour le moment, plus aucun problemes rencontrés ça roooooule :)

Re: Procedure Vigenere

Publié : ven. 19/août/2016 20:57
par Ar-S
modif faite.

Re: Procedure Vigenere

Publié : sam. 20/août/2016 7:41
par Zorro
Merci Ar-s :)