Cryptographie (Résolu... )

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Cryptographie (Résolu... )

Message par Good07 »

Bonjour à tous,
Bien qu’inscrit depuis de nombreuses années, je ne poste pas souvent sur le forum, car je mets un point d’honneur à trouver la solution tout seul. Mais je vous lis tous les jours et j’essaye de comprendre les programmes que vous postez. J’aime les posts de Kwai chang caine qui manipule l’auto dérision avec humour tel un maestro. Beaucoup d’entre vous sont des pointures en programmation et j’avoue que quelquefois vos programmes sont aussi obscurs que des hiéroglyphes…
J’aime la cryptographie telle qu’on la pratiquait au 19e siècle (et avant…) et le confinement de cette période m’oblige à trouver des idées de programme.
Comme je vous le disais plus haut il n’est pas dans mes habitudes de demander de l’aide, car j’estime qu’on apprend mieux les mains dans le cambouis…
Mais là, après des semaines, j’avoue que je sèche…
Le programme utilise un texte qu’il découpe en bigrammes (deux lettres), les compte et ensuite affiche le résultat graphiquement. Mais voilà, car il y a toujours un mais, je n’arrive pas à éliminer les doublons ce qui fait que le graphisme se trouve perturbé par plusieurs affichages au même endroit de la même donnée. J’avoue que j’ai fait beaucoup d’essais, remplacé les listes par des tableaux, essayé aussi les Maps qui devraient éviter les doublons, mais j’avoue que de ce côté les exemples de la doc sont vraiment obscurs.
Si vous regardez le débug, le bigramme GS est répété 32 fois, ce qui semble normal puisqu'il y en a 32, mais une fois suffirait. :cry:
Le programme n’est pas très long et je pense qu’il ne devrait pas poser de problèmes à des ténors comme vous …
Mais peut-être qu’il n’y a pas de solutions ?
Je vous remercie par avance si vous vous penchez sur mon problème…
J’arrête là mon discours (je vais finir par battre Kwai chang caine …)
Un os à ronger c’est toujours bon quand on s’ennuie. Vous pouvez aussi essayez de déchiffrer le message, mais ce ne sera pas facile... :D

Code : Tout sélectionner

Enumeration Windows
  #Window
  #TableauBigrammes
EndEnumeration

Structure TexteBig
  Bigramme.s
  Nbre.i
EndStructure

Structure Texte
  Lettre.s
  Nombre.i
EndStructure

Global NewList Alphabet.Texte()
Global NewList Tableau.TexteBig()
Global AlphabetRef.s 

; A$="QDPOHYQKPTBXQJCXSGMHQXEIBPZXMWMTISVSKHIETTJPQXWSGZHXLSPZMEEIPNHTNXPZJHBWHVMFXVYDWGXTYNIMKINJVMXJ"+
;    "YDBLBPTJYLIPYDXYTMRZWOHYQGIZXVKJMCXRCKINQTJPWUHYEZVCXZMPWTBTMMXXOMTVRMCITJYLTMNJVMXILAEGMHGZYVHQKZ"+
;    "ZHNWCOMXSPMPVWIIQVRMOSRMIIHMBNHTFSSMNXOSSNEBISPOIXGGMMITELCPVXWITJXKXQMMXCXZMPWTBTMMXXWIQAPXNVQQSNL"+
;    "EGHSKVIJZQHGGMZYKJYYIHOHYQESNBIXVPTZYCMVXFSGEIZTVBVMLEEKVMLHRHVMNLIBZQXLTPDIKXWJZWUTVPZENQHCQSLIVGNS"+
;    "GLUSVRWOSSNQHNVPDISLSSNPXLFMHFXLNCQSNLGFZVVAEGNIGAYPGEGMQCQSBEEAJQFXYLZXHFFCZXMHYRGIFTPFZYKWIBVRLVILZ"+
;    "WMJYCHSBVIQOIEEIMPQHBGCGPXJYGKEKEIMPUNBWCOEBMGCGPXJYGKPXNVCJYJNMCNXZTMCXILMNCVRGXHYMGHNFGZRFTVEJXYBPJZ"+
;    "HXOEEPIHNHCMYBLWCVYXMGCNXFHRAJINKSSWMXGPCGINKIRXILMPYNSXNVMPPBGGMIRNXGCGPXJYGIILMNYHEBLZCIYXVIJGIJNMCN"+
;    "XOXRSZXKHTRVVWYMJGIWXVCQIHNHCCELTVBZXVXWRHEFXVCJYETZMOVXNRCNSKVMCMIVHQKZPXLESOVXL"

;A$="ZHNWCOMXSPMPVWIIQVRMOSRMIIHMBNHTFSSMNXOSSNEBISPOIXGGMMITELCPVXWITJXKXQMMXCXZMPWTBTMMXXWIQAPXNVQQSNL"

A$="XGSUAZRKOQGPALLGUSXARIUGRGXYGZGSPTPOGUOGSVEGAJKIOE"+
   "SXGUKEOSEPFZDGSVEGERRGSQGZSRGPALLGUGSUFAVGOUGUVGOS"+
   "GDKZSSFZFTPOGXFTTGAZLRFUDGVEZVEGAJDGSIKOLATSGZQKQG"+
   "KZUSUFAUIRGEZXGSUAZLFAERRESDGVEGERRGSVEGERRGOEGSDG"+
   "REZQGSFDFOKZUSGUHKAZGSDGXYELLFZSDGLGTTGSFADGZLKZUS"+
   "DGDGZUGRRGSLRGUOEGSDGLEXYASDGQOKZDTGOGFASFZUIGEZUS"+
   "DGSQOELLFZSXGSURKNAFZUOFAVGOKEURGSTGDKERRFZSRGSTGX"+
   "YGSDGXYGVGAJPRKZXSFAPRFZDSRGSIFOUOKEUSRGSLRAGOSSGX"+
   "YGSDFZURGIKOLATSGTGRGKDGSIKOLATSDGLOAEUSFPALLGUDAV"+
   "EGAJUGTISUASKESPEGZDGSYESUFEOGSGUUAVFADOKESXFZUGOU"+
   "GSXFZUGSGUUAFOAESNAKZDSFAVOGZURGZUGTGZUUGSQOKZDGSI"+
   "FOUGSZEFOGS"

For n=1 To 26
  L$=Chr(64+n)
  If CountString(A$,L$)<>0
  AddElement (Alphabet())
  Alphabet()\Lettre=L$
  Alphabet()\Nombre=CountString(A$,L$)
  EndIf 
Next n

SortStructuredList(Alphabet(), #PB_Sort_Descending, OffsetOf(Texte\Nombre), TypeOf(Texte\Nombre))


; Création de l'alphabet de référence 
ForEach Alphabet()
  AlphabetRef=AlphabetRef+Alphabet()\Lettre
Next

; -------------- Remplir la list des bigramme ---------------
For n=1 To Len(A$)-1
  B$=Mid(A$,n,2)
  Nombre=CountString(A$,B$)
;   If CountString(C$,B$)=0
;     C$=C$+B$    
;   Else
;     Continue
;   EndIf
  AddElement(Tableau())
  Tableau()\Bigramme=B$
  Tableau()\Nbre=Nombre
Next n
  
SortStructuredList(Tableau(), #PB_Sort_Descending, OffsetOf(TexteBig\Nbre), TypeOf(TexteBig\Nbre))
ForEach Tableau()
  Debug Tableau()\Bigramme + "---> "+ Str(Tableau()\Nbre)
Next

If OpenWindow(#Window, 0, 0, 800, 800, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )=0
  End
EndIf
CanvasGadget(#TableauBigrammes,20,50,676,676)
StartDrawing(CanvasOutput(#TableauBigrammes))
Box(0,0,675,675,RGB(255,255,240))
StopDrawing()
If StartDrawing(CanvasOutput(#TableauBigrammes))
  For X=0 To 700 Step 25
    Line(X,0,1,675,RGB(0,0,0))
  Next X
  For Y= 0 To 700 Step 25
    Line(0,Y,675,1,RGB(0,0,0))
  Next Y
  PasX=35
  PasY=32
  X=0
  Y=0
  ForEach Alphabet()
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(PasX,Y+6,Alphabet()\Lettre,RGB(0,0,0))
    PasX+25
    DrawText(X+8,PasY,Alphabet()\Lettre,RGB(0,0,0))
    PasY+25
  Next
  ForEach Tableau()
    LettreG=FindString(AlphabetRef,Left(Tableau()\Bigramme,1),1)
    LettreD=FindString(AlphabetRef,Right(Tableau()\Bigramme,1),1)
;     Debug "--------------- decoupage bigrammes ---------------"
;     Debug Str(LettreG) + " ---> " + Str(LettreD)
    Total.s=Str(Tableau()\Nbre)
    If Len(total)=1
      total=" "+Total
    EndIf
    DrawText((25*LettreD)+5,(25*LettreG)+5,Total,RGB(0,0,0))
    ;Debug Str(lettreD)+" ---> "
  Next
StopDrawing()
EndIf

Repeat
  Event = WaitWindowEvent()  
Until Event = #PB_Event_CloseWindow
Dernière modification par Good07 le ven. 17/avr./2020 20:37, modifié 2 fois.
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: Cryptographie

Message par case »

est-ce que cela marche mieux ainsi ?

Code : Tout sélectionner

; -------------- Remplir la list des bigramme ---------------
For n=1 To Len(A$)-1
  B$=Mid(A$,n,2)
  Nombre=CountString(A$,B$)
;   If CountString(C$,B$)=0
;     C$=C$+B$   
;   Else
;     Continue
;   EndIf
  fnd=0
  ForEach Tableau()    
    If Tableau()\Bigramme=b$
      fnd=1
      Break
    EndIf
  Next
  If fnd=0
    AddElement(Tableau())
  Tableau()\Bigramme=B$
  Tableau()\Nbre=Nombre
  EndIf
  
  
Next n
 
:mrgreen:
ImageImage
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: Cryptographie

Message par Good07 »

Bonjour Case,
Oui ! C'est super, je n'ai plus de doublons en tête de liste et l'affichage est nickel. Je ne mets pas encore résolu pour l'instant, car je veux voir si il existe d'autre solution.
Un grand merci à toi, je vais pouvoir dormir. :D :D :D :D :D
Demivec
Messages : 91
Inscription : sam. 18/sept./2010 18:13

Re: Cryptographie

Message par Demivec »

Code : Tout sélectionner

; -------------- Remplir la list des bigramme ---------------
Define NewMap Bigramme()
For n=1 To Len(A$)-1
  B$=Mid(A$,n,2)
  If FindMapElement(Bigramme(), B$) = 0
    AddMapElement(Bigramme(), B$)
    Nombre=CountString(A$,B$)
    AddElement(Tableau())
    Tableau()\Bigramme=B$
    Tableau()\Nbre=Nombre
  EndIf
Next n
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: Cryptographie

Message par Good07 »

Bonjour Demivec,

Décidément, vous êtes très fort. J'aime bien ton approche aussi avec une Map, approche que j'avais aussi essayé, mais où j'avais échoué lamentablement suite aux mauvais exemples de la doc. Un grand merci pour cette réponse, quand je vois la réponse de Case, je crois que l'âge m'a encrassé les neurones. :(
Encore une fois merci pour vos réponses.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Cryptographie (Résolut )

Message par Kwai chang caine »

Good07 a écrit :Le programme utilise un texte qu’il découpe en bigrammes (deux lettres), les compte et ensuite affiche le résultat graphiquement.
Merci pour cette idée, je n'avais jamais vu ce genre de cryptage 8O
Même le mot "BIGRAMME" je ne l'avais jamais vu 8O
A la première lecture de ce mot (trop rapide), j'ai cru que l'on allait parlé d'un sujet trop "léger" :lol: ou trop lourd en ce qui concerne la "BIGRAMMIE" :mrgreen:
Good07 a écrit :J’aime la cryptographie telle qu’on la pratiquait au 19e siècle (et avant…)
Maintenant ceci explique cela, j'suis un vieux crouton....mais là .... :mrgreen:
Good07 a écrit :J’aime les posts de Kwai chang caine qui manipule l’auto dérision avec humour tel un maestro
Nadine...j'ai failli passer à coté de cette belle phrase :oops:
Je te remercie beaucoup, c'est pas tous les jours, alors ça fait toujours plaisir 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: Cryptographie (Résolu... )

Message par Good07 »

Bonjour Kwai chang caine,
En fait couper le cryptogramme pour en faire une table de bigrammes n'est pas un système de codage mais plutôt une aide pour le décodage. On peut ainsi isoler le chiffrement de lettres comme "LL", "ES", "FF" etc. C'est surtout utilisé dans les systèmes de chiffrement mono-alphabétique type César ou des textes chiffrés avec un alphabet mélangé tel le système Bellaso. Sur 10000 lettres le bigramme "ES" est présent 2896 fois. Bien sûr ce n'est pas systématique et ça va dépendre du texte qui à été chiffré. :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Cryptographie (Résolu... )

Message par Kwai chang caine »

Le décryptage c'est vraiment un truc de fou.
Bon ....comme toute chose, c'est surement aussi une affaire de pratique, d'entraînement. ... mais ça m'a toujours épaté de voir que certains arrivent à décrypter presque tout, en partant de rien 8O
Comme beaucoup de choses ...si j'avais aimé et compris les maths :oops: au CE1 :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre