[VB] Caractères ASCII

Bonjour,

J'essaye actuellement de faire un logiciel de cryptage en VisualBasic.
Mon logiciel consiste en un décallage des lettre en ASCII.
Je sais pour le moment ce n'est pas très clair, voilà mon code pour vous éclairer :)

Fonction de cryptage :

 Dim n As Integer, i As Integer, a As Integer
  Dim s1 As String, s2 As String, c as String
  
  TextField2.Text = ""
  s1 = TextField1.Text ' affecter à s1 le contenu de text1
  n = Len(s1) ' longueur du texte à coder
  
  For i = 1 To n ' boucle sur chaque caractère du texte
    c= Mid(s1,i,1) ' c est le ième caractère du texte
    a = Asc(c) + 1 ' a est le code ascii de t incrémenté de 1
    If a = 33 Then a = 32 ' si c'est un espace on conserve sa valeur (le code de l'espace est 32)
    s2 = s2 + Chr(a) ' on recompose la chaine avec les codes modifiés
  Next
  TextField2.Text = s2 ' on ecrit le resultat dans text2



Fonction de décryptage :

  Dim n As Integer, i As Integer, a As Integer
  Dim s1 As String, s2 As String, c as String
  
  s2 = TextField2.Text ' affecter à s1 le contenu de text1
  n = Len(s2) ' longueur du texte à coder
  For i = 1 To n ' boucle sur chaque caractère du texte
    c= Mid(s2,i,1) ' c est le ième caractère du texte
    a = Asc(c) - 1 ' a est le code ascii de t incrémenté de 1
    If a = 32 Then a = 32 ' si c'est un espace on conserve sa valeur (le code de l'espace est 32)
    s1 = s1 + Chr(a) ' on recompose la chaine avec les codes modifiés
  Next
  TextField1.Text = s1 ' on ecrit le resultat dans text2


Mon problème, c'est que quand on crypte un "à", un "é" ou certaines autres lettres et qu'on le décrypte, on ne tombe plus sur la même chose !

Je ne sais vraiment pas si c'est clair :S

2 réponses

  1. Bonjour,
    J'ai teste vos fonction en VBA execl. Avec les lettre accentuees ou autres cela donne le bon resultat en decodage.

    Bonne suite
    1. Bonjour,

      J'ai eu ce genre de problème avec un logiciel propriétaire.

      Quelque part dans la config un fichier de langue est mal
      identifié. Si comme moi tu es confronté à lire un fichier
      de type xml, ou même des données, une lettre accentué
      prendra 2 caractères.

      Le framework possède maintenant un objet Culture.Info

      Suggestion,

      crypte ton fichier avec la valeur hexa de l'octet, au lieu de
      l'instruction Asc(var), utilise Hex(var) et travail sur le mot
      binaire ainsi obtenu, il y a plein de codage possible,
      décalage a droite, decalage à gauche, complément à un, etc ...
      réécrit chaque octet, encode les sur deux octets de façon
      binaire ou relie ton fichier en testant

      c= Mid(s2,i,1)
      a = Asc(c)
      b = Asc(Mid(s2,(i+1),1)

      If (a & b ) = "é" Alors ...
      ElseIf ( a & b ) = "è" Alors ...
      ElseIf ( a & b ) = "î" Alors

      En fait créer une constantes

      Const cteLettreAcc("éêèàâî.
      Const cteLettreNon("eeeaai")

      if (Substr(1,cteLettreAcc,( a & b ) ,vbTextCompare) ­> 0 ) Then

      Cdt

      Lupin