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

Python Discussion :

Comment intégrer des chaines binaires dans le code source en base64


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 622
    Points : 188 607
    Points
    188 607
    Par défaut Comment intégrer des chaines binaires dans le code source en base64
    On appellera ici “chaine binaire” une chaine de caractères dans laquelle chaque caractère peut avoir une valeur de 0 à 255 (bornes comprises). Intégrer une chaine binaire dans le code source n'est pas facile, parce que la chaine binaire peut comporter a priori des octets de 0 à 255, mais les caractères intégrables dans le code source, donc affichables, devraient exclure au minimum les caractères de contrôles inférieurs à 32, certains caractères comme les guillemets ou les backslashs et se limiter à des octets inférieurs 128 (c'est-à-dire rester à 7 bits) pour échapper aux problèmes d'encodages. On va utiliser ici le module base64.

    Comment intégrer des chaines binaires dans le code source en base64

    Qu'en pensez-vous ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    La principale difficulté est d'automatiser la construction des scripts qui pourraient contenir ce genre de 'strings' : personne n'écrit du base64 natif!

    Ceci dit, à part l'exemple d'utilisation de base64, je ne sais pas trop quels sont les cas d'utilisation d'une telle démarche:

    - Il faut produire le script avec des outils adhoc,
    - Les fichiers sont plus gros,
    - Il faut "convertir" avant de pouvoir utiliser,

    Il est quand même plus simple d'avoir un répertoire .datafiles dans lequel stocker tous ces fichiers binaires - sans les 'intégrer' au burin dans des scripts.
    Qu'en pensez vous?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Je suis bien du même avis que vous: il vaut mieux garder des fichiers séparément.

    Cela dit, il y a un cas où c'est utile: pour des touts petits projets qui doivent être distribuables en un seul fichier et exécutables sans installation préalable.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Si on doit distribuer un seul fichier, autant livrer un exécutable construit avec un cx_freeze ou autre py2exe. Et ce faisant, on se libère aussi des dépendances sur la version de Python installée sur le système.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonsoir.
    il est dit dans le tuto. :
    l'Unicode ne semble pas être supporté avec Python 2.7.
    Il y a des choses intéressantes à ce sujet ici par exemple.

    Le petit exemple fonctionne sous Python 3 en faisant comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #! /usr/bin/env python3
    import base64
    ch64 = b'Ym9uam91ciDgIHRvdXMh'
    chbin = base64.b64decode(ch64)
    print(chbin)
    On travaille sur des bytes, et on obtient des bytes. C'est plus cohérent. Cela fait partie des grands changements dans Python 3, et par conséquent cela explique le comportement de Python 2.7.

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 471
    Points : 9 265
    Points
    9 265
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Merci rambc, ton lien est intéressant.


    Cette technique n'est pas destinée à une utilisation intensive, mais elle peut permettre ce que font les "fichiers de ressources" des bibliothèques graphiques: intégrer une icone dans le code par exemple. A noter que ces fichiers de ressource, pour Qt4 par exemple, codent en hexa ('\xFD'), ce qui multiplie par 4 l'espace pris par chaque octet, alors que base64 ne multiplie que par 1.33 environ.

    J'ai aussi utilisé base64 pour construire un identificateur unique (guid) qui contenait un chemin de disque. Cela permettait , sous Windows, de neutraliser les '\', les espaces et les caractères accentués, afin d'obtenir un identificateur syntaxiquement correct.

    On peut aussi s'en servir comme "obfuscateur" de code pour certaines parties sensibles, sinon pour cacher le code, du moins pour rendre moins faciles des modifications intempestives de l'utilisateur.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Réponses: 14
    Dernier message: 16/04/2013, 12h22
  2. Réponses: 2
    Dernier message: 31/03/2006, 16h48
  3. Réponses: 11
    Dernier message: 13/03/2006, 17h51
  4. Comment utiliser des instructions SSE2 dans un code c++?
    Par alexIsBack dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 22/02/2006, 19h10

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