Convertir une string en string selon une algorithme

Résolu
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007 - 11 juin 2005 à 22:13
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007 - 20 juin 2005 à 22:08
Bonsoir
je veux Traduire cet algorithime en code VB :

DONNEES:
le text tapé en textbox1 se transforme en textbox2 selon
-la corespondance des mots: mange se transforme en suite et ka en po
-la coresspondance des lettres (abcdefghijklmnopqrstvwxyz) se transforme en(jbcdefghrjkamdopqrstvwxyz)

-l'algorithme est le suivant :
si je tape des mots separer par des "." et "/" et ","
si il rencontre un "/" " ," ou" ." au debut, à la fin ou les deux(au debut et à la fin) dans un mot, et si ce mot a son correspondance au code, il va le converti selon la correspondance des mots, si non il va le convertir selon la correspondance des lettres

par exemple:
si je tappe on textbox1 : alin/mange/imange/mange doit se transformer en jard/suite/imjdge/suite

40 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2005 à 18:20
il y avait une erreur dans la deuxième méthode.









j = 1

For i = 1 To Len(s)

c = Mid$(ch, i, 1)

If c "." Or c "," Or c = "/" Then

k = InStr(j, s, "/")

Mid$(s, k, 1) = c

j = k + 1

End If

Next


Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
13 juin 2005 à 18:41
Salut,

Hou là ! A force de rajouter des conditions, ça va vite devenir une usine à gaz.
Je ne suis pas contre la recherche de solutions, c'est très bon pour l'esprit. Mais si tu disais franchement où tu veux en venir. Quel est ton but ? Que veux tu obtenir réellement ?

Pour la substitution de lettres, c ok, pas de problème et tu dois maitriser maintenant avec les réponses à ce post et aux précédents.

Pour la substitution de mots, je trouve que c'est plus flou.
J'ai compris ça :

/mange = /suite
.mange = .suite
,mange = ,suite
mange/ = suite/
mange. = suite.
mange, = suite,
/mange/ = /suite/
/mange. = /suite.
/mange, = /suite,
etc ...

mais par ex,
/mange mange/
/mange;mange/
/mange-mange/
/mange!mange/
/mange?mange/
etc ...

ça se traduit en quoi ?

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2005 à 18:59
/mange mange/ = /mjdje mjdje/

/mange;mange/ = /mjdje;mjdje/

/mange-mange/ = /mjdje-mjdje/

/mange!mange/ = /mjdje!mjdje/

/mange?mange/ = /mjdje?mjdje/



voilà



Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2005 à 19:02
ça ressemble à du codage de mot ?

serait ce pour un jeu ?

ou une phrase à trouver ?

Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
13 juin 2005 à 20:26
Ouaip, donc usine à gaz ! Pour les mots, je pencherais sur l'utilisation de tables de correspondance, de pref sous access ou autre sgbd sinon, temps de traitement trop long.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 21:44
Sur Daniel
meme si je remplace le deuxieme methode le probleme reste le meme

Bon le but de ce projet
cet algorithme est une partie d'une autre algorithme(tres long) de cryptographie en telecommunications de clé 128 , a condition que le text crypté est constitué juste de 200 mots , mais la reconstitution du text de depart se base sur les "," "." et "/" ceci decris ce qu'il fait cette partie d'algothime
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 21:46
Sur CanisLupus
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 21:47
Sur Canu
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 21:51
Sur CanisLupus , je pense que 200 mots ne demande pas un sgbd
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 21:59
Je vous promet Monsieur Daniel ca sera la derniere question qur ce sujet
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2005 à 22:07
oups !









j = 1

For i = 1 To Len(ch)

c = Mid$(ch, i, 1)

If c "." Or c "," Or c = "/" Then

k = InStr(j, s, "/")

Mid$(s, k, 1) = c

j = k + 1

End If

Next


Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
13 juin 2005 à 23:09
Peux-tu nous en dire un peu plus sur cet algo de cryptage ?
C'est une invention de ta part ou cet algo existe déjà et dans ce cas lequel ? J'ai ma petite idée mais j'aimerais une confirmation.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
14 juin 2005 à 15:23
Bonjour,
Sur Daniel , ce code ne marche pa aussi, mais bon je vai garder le premier code, car cette derniere tache n'est pa interessante , Merci beaucoup pour ton aide, et aussi les autres, je vai ajouter votre nom au remerciement du rapport de projet de fin d'etude .

Sur CanisLupus
il s'agit pa d'une invention il s'agit juste d'une petite idée a pour but de deminuer le taux de cryptage d'une melange d'ensemble des algorithmes de cryptage
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
15 juin 2005 à 20:29
Peut-être que c'est trop tard, mais comme j'avais un peu de temps cet après-midi et qu'un défi comme ça m'intéresse, j'ai pondu une solution à ton problème :

Une form avec 2 textbox (text1 et text2) et 2 commandbutton (command1 et command2).
command1 crypte vers text2 et command2 decrypte vers text1 Et le code suivant dans la form.

ATTENTION :
- Il ne faut pas retrouver plus d'une fois la même lettre dans l2 pour le cryptage par lettre.
- Il ne faut pas retrouver plus d'une fois le même mot dans mot1
- idem pour mot2
- le cas où le résultat du cryptage par lettre donnerait un mot existant dans le tableau mot2 n'est pas géré et peut donner un décryptage faux.

Tu essaies

Private Const l1 As String = "abcdefghijklmnopqrstvwxyz"
Private Const l2 As String = "jbcnefghrlkamdopqistvwxyz"
Dim mot1() As String ' tableau des mots à crypter
Dim mot2() As String ' tableau des correspondances
Dim chaine() As String
' tableau de la chaine découpée


Private Sub Command1_Click()
Dim i As Integer
Dim r As String


TRANSFORM_CHAINE_EN_TABLEAU Text1.Text

For i = 0 To UBound(chaine)
If chaine(i) <> "/" And chaine(i) <> "." And chaine(i) <> "," Then
r = CRYPT_MOT(chaine(i))
If r = "" Then
chaine(i) = CRYPT_LETTRE(chaine(i))
Else
chaine(i) = r
End If
End If
Next

Text2.Text = Join(chaine, "")


End Sub


Private Sub Command2_Click()
Dim i As Integer
Dim r As String


TRANSFORM_CHAINE_EN_TABLEAU Text2.Text

For i = 0 To UBound(chaine)
If chaine(i) <> "/" And chaine(i) <> "." And chaine(i) <> "," Then
r = DECRYPT_MOT(chaine(i))
If r = "" Then
chaine(i) = DECRYPT_LETTRE(chaine(i))
Else
chaine(i) = r
End If
End If
Next

Text1.Text = Join(chaine, "")


End Sub


Private Sub Form_Load()


INIT_TABLEAUX_MOTS


End Sub


Function CRYPT_LETTRE(s As String) As String
Dim s1 As String
Dim i As Integer


For i = 1 To Len(s)
s1 = s1 & Mid(l2, InStr(l1, Mid(s, i, 1)), 1)
Next

CRYPT_LETTRE = s1

End Function


Function DECRYPT_LETTRE(s As String) As String
Dim s1 As String
Dim i As Integer


For i = 1 To Len(s)
s1 = s1 & Mid(l1, InStr(l2, Mid(s, i, 1)), 1)
Next

DECRYPT_LETTRE = s1

End Function


Sub TRANSFORM_CHAINE_EN_TABLEAU(ByVal s As String)
Dim i As Integer
Dim dep As Integer
Dim lng As Integer
Dim c As String
Dim idx As Integer


idx = -1
dep = 1
lng = 0
ReDim chaine(0)

For i = 1 To Len(s)
c = Mid(s, i, 1) If c "/" Or c "." Or c = "," Then
idx = idx + 1
ReDim Preserve chaine(idx)
If i = 1 Then ' si c le 1er caractère
chaine(idx) = Mid(s, i, 1)
Else
chaine(idx) = Mid(s, dep, lng)
idx = idx + 1
ReDim Preserve chaine(idx)
chaine(idx) = Mid(s, i, 1)
End If
dep = i + 1
lng = 0
Else
lng = lng + 1
If i = Len(s) Then ' si on est arrivé à la fin de la chaine
idx = idx + 1
ReDim Preserve chaine(idx)
chaine(idx) = Mid(s, dep, lng)
End If
End If
Next

End Sub


Function CRYPT_MOT(s As String) As String
Dim j As Integer


For j = 0 To UBound(mot1)
If s = mot1(j) Then
CRYPT_MOT = mot2(j)
Exit Function
End If
Next


End Function


Function DECRYPT_MOT(s As String) As String
Dim j As Integer


For j = 0 To UBound(mot2)
If s = mot2(j) Then
DECRYPT_MOT = mot1(j)
Exit Function
End If
Next


End Function


Sub INIT_TABLEAUX_MOTS()

' Là, tu initialise tes tableaux de correspondances
ReDim mot1(1): ReDim mot2(1) mot1(0) "mange": mot2(0) "suite" mot1(1) "ka": mot2(1) "po"


End Sub

Comme je n'ai pas mis trop de commentaires, pour toute explication, je reste à l'écoute.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
17 juin 2005 à 12:53
Bonsoir,


J'ai qlq remarques sur ton code CanisLupus


-Le code ne peu pas crypter un long text ( plus de 200 mots) il donne une erreur.


-Il est de preference de ne pas utiliser des commandes (boutons) pour crypter le text, car le faite de crypter un text au meme temps quand on ecris, ca va reduire un peu le taux de crypatage.


-Le code ne crypte que le les lettres qui sont definie au code, il ne crypte pas les numeros les chifres qlq lettre comme "é" et "è",ce qui facilite de casser l'algorithme de crypt
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
17 juin 2005 à 14:03
elmekki, ce n'est qu'un exemple, c'est à toi d'adapter.

- 200 mots ?
ReDim mot1(200): ReDim mot2(200)
plus ?
ReDim mot1(300): ReDim mot2(300)
etc
Reste à connaître la taille max acceptable par une textbox et là je n'en sais rien mais ce n'est sùrement pas illimité.
Quel est le message d'erreur ? Moi je n'en ai pas.

- les commandbuttons c'était pour tester, tu peux mettre le code dans les textbox_change si tu veux.

- si tu veux que le code crypte des caractères autres que de a à z, c'est à toi de gérer les correspondances dans
Private Const l1 As String = "abcdefghijklmnopqrstvwxyz"
Private Const l2 As String = "jbcnefghrlkamdopqistvwxyz"
rien ne t'empêche de faire par exemple :
Private Const l1 As String = "abcdefghijklmnopqrstvwxyz123456789"
Private Const l2 As String = "jbcnefghrlkamdopqistvwxyz987654321"
Ca fonctionnera aussi.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
17 juin 2005 à 21:37
moi j'ai pa parler de la redimmensionnement des tableaux
-mais, si on ecris un text un peu long (plus de 200 mots) dans textbox1 et en veu le crypter en cliquant sur command1 il donne une erreur " s1 = s1 & Mid(l2, InStr(l1, Mid(s, i, 1)), 1)"
-on peu pa definir tout les chifres et les lettres qui existe au clavier au code, est ce que tu peu ajouter cette tache , cad si on ecri une lettre ou une chifre qui n'est pa difinie au code il se converti quand meme a elle-meme .
par exemple si on tape en textbox1 "£" il se tradui en textbox2 en "£"
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
17 juin 2005 à 21:40
comme le code de Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 juin 2005 à 11:56
Pour l'erreur, effectivement, si la lettre tapée dans text1 n'existe pas dans l1, ça plante donc modif des fonctions de cryptage des lettres, qui répondra en même temps à ton 2ème point (caractère se convertissant en lui-même) :

Function CRYPT_LETTRE(s As String) As String
Dim s1 As String
Dim i As Integer
Dim pos As Integer


For i = 1 To Len(s)
pos = InStr(l1, Mid(s, i, 1))
If pos > 0 Then
s1 = s1 & Mid(l2, pos, 1)
Else
s1 = s1 & Mid(s, i, 1)
End If
Next

CRYPT_LETTRE = s1

End Function


Function DECRYPT_LETTRE(s As String) As String
Dim s1 As String
Dim i As Integer
Dim pos As Integer


For i = 1 To Len(s)
pos = InStr(l2, Mid(s, i, 1))
If pos > 0 Then
s1 = s1 & Mid(l1, pos, 1)
Else
s1 = s1 & Mid(s, i, 1)
End If
Next

DECRYPT_LETTRE = s1

End Function

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
20 juin 2005 à 22:08
Bonsoir
je suis desolé pour le retard j'ai eu des examans,
Merci bq pour cette deuxieme solution CanisLupus.
0
Rejoignez-nous