Page 1 sur 1
[..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 17:06
par timano
Bonjour , Hier j'ai vue un film , dans ce dernier les messages sont cryptés entre deux policiers , ce cryptage est fait par des permutations .
J'explique ..
On a par exemple Salut :
- 5 lettres = 5! possibilités = 5 x 4 x 3 x 2 x 1 = 120 mots possible
- On aura alors Salut , Sulat , Sltau .....
alors un autre exemple , la phrase "je veux du pain" peux devenir " je xvue ud ipna"
alors j’aimerai bien si vous m'aider à réaliser ce scripte , et merci .
je sais que StringLen ( "string" ) Donne le nombres des lettres dans un mot
et j'aimerai aussi que quand j'entre un mot les résultat possibles seront affiché dans un edit l'un sous l'autre
et merci infiniment.
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 17:48
par timano
Bon j'ai fait une petite essaye mais voila je trouve que mon script est trop long à écrire car la répartition des variables est manuelle , et mon script là ne genere qu'une partie des mots de taille = 4
► Afficher le texte
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 184, 344, 192, 124)
$Input1 = GUICtrlCreateInput("Input1", 24, 24, 121, 21)
$Button1 = GUICtrlCreateButton("Button1", 56, 64, 75, 25, $WS_GROUP)
GUICtrlSetData(-1, "Edit1")
$List1 = GUICtrlCreateList("", 24, 224, 121, 97)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$Input1 = GUICtrlRead($Input1)
$x = StringSplit($Input1, "")
$m = String($x[4]&$x[1]&$x[2]&$x[3])
GUICtrlSetData($List1,$m )
$m = String("")
$m = String($x[4]&$x[2]&$x[3]&$x[1])
GUICtrlSetData($List1,$m )
$m = String("")
$m = String($x[4]&$x[3]&$x[2]&$x[1])
GUICtrlSetData($List1,$m )
$m = String("")
$m = String($x[4]&$x[3]&$x[1]&$x[2])
GUICtrlSetData($List1,$m )
$m = String("")
$m = String($x[4]&$x[1]&$x[3]&$x[2])
GUICtrlSetData($List1,$m )
$m = String("")
$m = String($x[4]&$x[2]&$x[1]&$x[3])
GUICtrlSetData($List1,$m )
$m = String("")
$m = String($x[2]&$x[4]&$x[1]&$x[3])
GUICtrlSetData($List1,$m )
$m = String("")
EndSwitch
WEnd
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 18:13
par zeshrek
vite fait sur le pouce...
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1)
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 422, 211, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Input1 = GUICtrlCreateInput("Input1", 32, 16, 273, 21)
GUICtrlSetOnEvent(-1, "Input1Change")
$Button1 = GUICtrlCreateButton("Re-générer", 320, 80, 75, 25)
GUICtrlSetOnEvent(-1, "Button1Click")
$Button2 = GUICtrlCreateButton("Ok", 80, 136, 75, 25)
GUICtrlSetOnEvent(-1, "Button2Click")
$Label1 = GUICtrlCreateLabel("", 32, 80, 273, 21, -1, $WS_EX_CLIENTEDGE)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func Button1Click()
Input1Change()
EndFunc ;==>Button1Click
Func Button2Click()
ClipPut(GUICtrlRead($Label1))
Exit
EndFunc ;==>Button2Click
Func Form1Close()
Exit
EndFunc ;==>Form1Close
Func Input1Change()
Local $string = GUICtrlRead($Input1)
Local $stringlen = StringLen($string)
Dim $scrambledstring[$stringlen]
For $i = 1 To $stringlen + 1
While 1
$random = Random(0, $stringlen - 1, 1)
If $scrambledstring[$random] = "" Then
$scrambledstring[$random] = StringMid($string, $i - 1, 1)
ExitLoop
EndIf
WEnd
Next
GUICtrlSetData($Label1, _ArrayToString($scrambledstring, ""))
EndFunc ;==>Input1Change
Edit : Hum a améliorer, c'est pas totu a fait ce que tu voulais semble t il... mais ca prendrait 5 mn a a le modifier... Je verai ca un peu plus tard, là faut que je parte du boulot
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 19:38
par sylvanie
Bonsoir,
en reprenant le dernier code, j'ai juste changer le corps de la fonction de mélange :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1)
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 422, 211, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Input1 = GUICtrlCreateInput("Input1", 32, 16, 273, 21)
GUICtrlSetOnEvent(-1, "Input1Change")
$Button1 = GUICtrlCreateButton("Re-générer", 320, 80, 75, 25)
GUICtrlSetOnEvent(-1, "Button1Click")
$Button2 = GUICtrlCreateButton("Ok", 80, 136, 75, 25)
GUICtrlSetOnEvent(-1, "Button2Click")
$Label1 = GUICtrlCreateLabel("", 32, 80, 273, 21, -1, $WS_EX_CLIENTEDGE)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func Button1Click()
Input1Change()
EndFunc ;==>Button1Click
Func Button2Click()
ClipPut(GUICtrlRead($Label1))
Exit
EndFunc ;==>Button2Click
Func Form1Close()
Exit
EndFunc ;==>Form1Close
Func Input1Change()
Local $string = GUICtrlRead($Input1)
Local $stringlen = StringLen($string)
Local $stringreturn=""
Local $rnd
While ($stringlen>1)
$rnd=Random(1,$stringlen,1)
$stringreturn&=StringMid($string,$rnd,1)
$string=StringLeft($string,$rnd-1)&StringRight($string,$stringlen-$rnd)
$stringlen-=1
WEnd
$stringreturn&=$string
GUICtrlSetData($Label1,$stringreturn)
EndFunc ;==>Input1Change
L'optimisation réside dans le fait qu'on fait un nombre fixe de tours de boucle contrairement à la première version on on peut des fois "tourner dans le vide" quand le random retombe sur des valeurs déjà traîtées.
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 21:59
par mikell
Merci au forum US tout de même...

► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Array.au3>
$Form1 = GUICreate("Form1", 184, 344, 192, 124)
$Input1 = GUICtrlCreateInput("salut", 24, 24, 121, 21)
$Button1 = GUICtrlCreateButton(" Go ", 56, 64, 75, 25)
$List1 = GUICtrlCreateList("", 24, 124, 121, 197)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$Input = GUICtrlRead($Input1)
$x = StringSplit($Input, "", 2)
$array = _ArrayCombinations($x, UBound($x), "")
For $i = 1 To $array[0]
$aSet = StringSplit($array[$i], "", 2)
$aPerm = _ArrayPermute($aSet)
For $j = 1 To $aPerm[0]
GUICtrlSetData($List1,$aPerm[$j])
Next
Next
EndSwitch
WEnd
Mais limité à des mots pas trop longs (on se demande bien pourquoi...

)
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 22:01
par jchd
J'allais le dire. C'est d'ailleurs peut-être dans ce fil que j'avais trouvé et fixé un bug dans l'une de ces fonctions.
Attention quand même comme le dit Mikell, la combinatoire explose très vite ! Ne pas enquiller une chaîne de 100 caractères... ou alors prévoir une RAM taillée pour et un délai confortable.
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 22:08
par sylvanie
c'est pour ça que je préfère éviter les manipulations de tableaux et leurs fonctions associées car elles sont très pratiques, mais c'est lourd à l'exécution ...
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 22:15
par mikell
Bah autoit a prévu une sécurité sur la dimension des arrays de travail, on a le message d'erreur avant d'avoir les cheveux blancs
Cela dit je ne suis pas certain qu'éviter l'utilisation de tableaux épargnerait les quelques siècles d'attente du résultat...

Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 22:21
par sylvanie
certes, mais si on ne peut pas aller au delà de 200 mots d'un côté alors qu'une méthode à base de chaîne en traite 600 en un clin d'oeuil , mon choix est vite fait
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 22:34
par mikell
C'est vrai, bien que dans le cas présent ça ferait un sacrément gros clin d'oeil
Mais bah, une année de plus ou de moins... on va pas commencer à chipoter
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : ven. 18 nov. 2011 23:22
par jchd
600! en un clin d'oeil ? Et ce n'est que pour les combinaisons, on ne compte pas le partitionnement (s'il en faut un) qui est le nombre B_600 (
nombre de Bell).
Pour info, "rien que" 600! vaut
126557231622543074254186782451508292976714038622746607681878288585281408231473\
512378178027956195710747652085325980602248032409037821647694307950255780542719\
062833876438260884481246264883326236083761640812211711794398858402578187329190\
378896037191867439433630621395937844739222318527825476197717238892524768711860\
001746979345491128456625961823082803906151846919244462155525865237400849328072\
590562389621046897315225875644122316180187743508015268395673674449282062313109\
736194403547237180128677530195561357213762079595588605599330528569141571206229\
800571698919125959265404275968534412769850067248695582019306579002409430076578\
174736840089444481832191241630176666077706675850821695982392302740355177386480\
656004927020957328434927088560369202198833631115279881092773926965627768134466\
456512384193015861573428678606466663500501133147879113206396685108715698466648\
735950175189956709584778064116675053464625904711368626473496662434262426771752\
047323142810644179390418686537411874230649851895567426401115985800356440218355\
767157528693974654538285844712912699558903932944483157465002687021497088080531\
004063984809426956235860494033480849700646689002062515169684797275155764259623\
921362691690898846097942713310610188956344210940823104088897529542658426917324\
605389117849600000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
00000
et un clin d'oeil, même à 3 GHz et avec 16 IA-64, ça fait moins, beaucoup moins...
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : sam. 19 nov. 2011 11:28
par sylvanie
Attention, je n'ai pas prétendu qu'on sortait les 600! combinaisons possibles en un clin d'oeuil mais juste une parmi ce nombre faramineux.
Le but du script est bien d'en sortir une seule non ?
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : sam. 19 nov. 2011 11:55
par mikell
timano a écrit :j'aimerai aussi que quand j'entre un mot les résultat possibles seront affiché dans un edit l'un sous l'autre
Vu le cahier des charges le but semble plutôt de sortir la liste des permutations possibles
ça peut le faire à la rigueur pour bruteforcer un password de 4 ou 5 caractères...

Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : sam. 19 nov. 2011 15:20
par jchd
S'il ne s'agit que d'une [poignée de] combinaison prise au hasard, on peut utiliser ce
code-là.
Dans ce cas, exit de la limitation en taille et ça tourne rapidement car en O(n) et non plus en O(n!).
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : sam. 19 nov. 2011 17:16
par sylvanie
ok, j'ai lu trop vite.
Cependant si on cherche à chiffrer un message par une méthode de substitution, je ne vois pas l'intérêt de toutes les calculer...
Je en pense pas qu'une Rainbow table dédiée à l'attaque des substitutions d'une phrase soit des plus convoitée .
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : sam. 19 nov. 2011 17:50
par jchd
Mouais, tu sais ce que valent ce genre de méthodes et où se trouve le maillon faible d'une chaîne crypto, même sûre ; en plus, c'était "dans un film", hein !
Re: [..] Script Qui Donne Les Pérmutations Possibles
Posté : sam. 19 nov. 2011 18:28
par mikell
Cessez, mauvaises langues
Faut s'en tenir au titre du topic, non ?