Procedure Vigenere
Re: Procedure Vigenere
rooo.... "En tout cas on est paré avec toutes ces codes décryptage by ALL"
@++
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Procedure Vigenere
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
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
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Procedure Vigenere
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.
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
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Re: Procedure Vigenere
une belle amélioration en effet
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
- JohnJohnsonSHERMAN
- Messages : 648
- Inscription : dim. 13/déc./2015 11:05
- Localisation : Allez, cherche...
- Contact :
Re: Procedure Vigenere
Parfait ces améliorations... comme ca j'aurais pas a me casser la tête dessus plus tard
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
- Windows 10 x64 - PB 5.61 x64
- Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Re: Procedure Vigenere
Attention , j'ai corrigé un bug sur la procedure Vigenere du premier message
dans certain cas ça ne marchait pas ......
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
ma modification remplace en fait :
par cela :
le met la lose !!
dans certain cas ça ne marchait pas ......
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
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)
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
- JohnJohnsonSHERMAN
- Messages : 648
- Inscription : dim. 13/déc./2015 11:05
- Localisation : Allez, cherche...
- Contact :
Re: Procedure Vigenere
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
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
- Windows 10 x64 - PB 5.61 x64
- Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Re: Procedure Vigenere
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
et, du coup ça la met bien en epreuve
pour le moment, plus aucun problemes rencontrés ça roooooule
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Procedure Vigenere
modif faite.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Procedure Vigenere
Merci Ar-s
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"