IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Convertir Chaine en Single puis l'inverse


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut Convertir Chaine en Single puis l'inverse
    Bonjour,

    cela fait plusieurs jours que je m'arrache les cheveux, est-ce que quelqu'un peux m'aider :

    Je cherche à convertir une chaine en Single via le code de caractère afin de pouvoir refaire la conversion inverse plus tard.

    Tout ça dans le but de crypter ma donnée via RSA :

    1) "test" => 1234567
    2) 1234567 => CRYPTAGE RSA
    3) DECRYPTAGE RSA => 1234567
    4) 1234567 => "test"

    le Type Single n'est pas obligatoire mais j'ai choisie ça plutôt que de l'integer pour stocker une chaine relativement conséquente.
    En gros je demande un coup de main pour le 1) et le 4)

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Citation Envoyé par Shushugo Voir le message
    Le Type Single n'est pas obligatoire mais j'ai choisie ça plutôt que de l'integer pour stocker une chaine relativement conséquente.
    En gros je demande un coup de main pour le 1) et le 4)
    Le souci avec les types numériques, c'est que, passé une certaine limite, tu auras un retour en écriture scientifique.
    Le seul type valable pour ce que tu souhaites reste le String.

    Pour le point 1, aucun souci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Appel()
    Dim s As String
       s = "ceci est une chaine de test"
       MsgBox ToString(s)
    End Sub
     
    Function ToString(s As String) As String
    Dim tb() As Byte, i As Long, st As String
       tb = StrConv(s, vbFromUnicode)
       For i = LBound(tb) To UBound(tb)
          st = st & CStr(tb(i))
       Next
       ToString = st
    End Function
    ToString("ceci est une chaine de test") renvoie : 991019910532101115116321171101013299104971051101013210010132116101115116

    Par contre, le point 4 est ardu (impossible pour moi en tout cas) si tu ne trouves pas le moyen de séparer tes "lettres" par un signe distinctif...
    Sauf à garder en mémoire le tableau de byte (tb dans mon exemple ci-dessus), mais le cryptage n'aurait alors aucun intérêt...

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Shushugo Voir le message
    stocker une chaine relativement conséquente.
    Quelle longueur max ?

    le Type Single n'est pas obligatoire mais j'ai choisie ça plutôt que de l'integer
    Quitte à stocker sur 4 octets, il vaudrait mieux utiliser un type Long puisqu'il est peu probable que tu ais besoin de décimales ou de format scientifique.
    https://docs.microsoft.com/fr-fr/off...long-data-type
    Mais même Long est limité à 2 milliards (environ). Donc, en supposant que ta chaine soit composé d'éléments avec 26 possibilités (les lettres de l'alphabet), tu ne pourrais pas dépasser 6 caractères.
    Si ta chaine est plus importante, la solution serait de la tronçonner pour la convertir par groupes de 4 caractères.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    C'est pour crypter des chaines de 15 caractères qui contiennent des chiffres ainsi que des chaines de longueur variables (nom, prénom, adresse).
    C'est d'ailleurs un de mes problèmes de cryptage.
    Et comme avec RSA je ne sais crypter que des entier j'avais pris Single arbitrairement.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Shushugo Voir le message
    Et comme avec RSA je ne sais crypter que des entier j'avais pris Single arbitrairement.
    Single n'est pas un type de donnée "entier" mais "virgule flottante", c'est-à-dire décimale.
    https://docs.microsoft.com/fr-fr/off...ngle-data-type

    C'est pour crypter des chaines de 15 caractères qui contiennent des chiffres ainsi que des chaines de longueur variables (nom, prénom, adresse).
    Nom et prénom, ça signifie donc aussi majuscules/minuscules, lettres accentuées, espace, tiret, sans parler des caractères particulier de personnes étrangères.
    Bref, au bas mot, entre 60 et 80 caractères différents. Ce qui signifie que, quel que soit le codage choisi, tu dépasseras la capacité du type Long au dela de 4 caractères.

    Même le type LongLong (entier sur 8 octets) ne te permettra d'atteindre que 10 caractères pour un panel de 60 caractères différents.
    (au passage, Excel ne sait pas gérer les nombres de cette taille en gardant tous les chiffres)
    Vérifie aussi si ton logiciel de codage est capable de les intégrer.

    Pour faire ce que tu souhaites, l'attaque frontale ne fonctionnera pas. Il va falloir imaginer des chemins de traverse.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Je n'ai pas l'intention de participer à un mécanisme de codage tel que choisi là.
    Je n'interviens que pour reprendre cette proposition de Pijaku :
    si tu ne trouves pas le moyen de séparer tes "lettres" par un signe distinctif...
    Salut, Franck.
    ce que fait ceci (exemple) t'amusera peut-être --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto = "C'est-y pas drôle, çà ?"
      titi = Replace(StrConv(toto, vbUnicode), Chr(0), "/coucou/")
      MsgBox titi
    Amitiés

  7. #7
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Bien vu Jacques.

    Cela donnerait donc quelque chose comme ceci :
    [Je sais, Jacques, que tu sauras apprécier le choix de la chaîne que j'utilises pour tester]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub Appel()
    Dim s As String, AvantRSA As String, ApresRSA As String
       s = "Ce FÈZ, n'eSt Pas d'une exceptionnelle qualitÈ"
       Debug.Print s
       AvantRSA = AvantCryptageRsa(s)
       Debug.Print AvantRSA
       ApresRSA = ApresCryptageRsa(AvantRSA)
       Debug.Print ApresRSA
    End Sub
     
    Function AvantCryptageRsa(s As String) As String
    Dim Tb() As Byte, i As Long, st As String
       Tb = StrConv(s, vbUnicode)
       For i = LBound(Tb) To UBound(Tb)
          st = st & Tb(i)
       Next
       AvantCryptageRsa = st
    End Function
     
    Function ApresCryptageRsa(s As String) As String
    Dim Tb, i As Long, out As String
       s = Replace(s, "00000", "00 000")
       s = Replace(s, "0000", "0 000")
       Tb = Split(s, "000")
       For i = LBound(Tb) To UBound(Tb) - 1
          out = out & Chr$(RTrim$(Tb(i)))
       Next i
       ApresCryptageRsa = out
    End Function
    Résultat :
    Ce FÈZ, n'eSt Pas d'une exceptionnelle qualitÈ
    6700010100032000700002000009000044000320001100003900010100083000116000320008000097000115000320001000003900011700011000010100032000101000120000990001010001120001160001050001110001100001100001010001080001080001010003200011300011700097000108000105000116000200000
    Ce FÈZ, n'eSt Pas d'une exceptionnelle qualitÈ

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/05/2010, 22h03
  2. [VBA][EXCEL]Conversion d'une chaine en single
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/11/2005, 17h28
  3. Convertir chaine de caractere
    Par Antoine NSG dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2005, 15h32
  4. [FLASH MX2004] Convertir chaine en date
    Par stip dans le forum Flash
    Réponses: 5
    Dernier message: 20/01/2005, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo