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

Shell et commandes GNU Discussion :

Décoder un fichier ligne par ligne base64


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut Décoder un fichier ligne par ligne base64
    Bonjour à tous

    Voilà j'ai un petit probleme, voici mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    neolex@neolex-pc> Analyse de log$cat data
    192.168.1.23 - - [18/Jun/2015:12:12:54 +0200] "GET /admin/?action=membres&order=QVNDLChzZWxlY3QgKGNhc2UgZmllbGQoY29uY2F0KHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDEsMSkpKSwxLDEpLHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDEsMSkpKSwyLDEpKSxjb25jYXQoY2hhcig0OCksY2hhcig0OCkpLGNvbmNhdChjaGFyKDQ4KSxjaGFyKDQ5KSksY29uY2F0KGNoYXIoNDkpLGNoYXIoNDgpKSxjb25jYXQoY2hhcig0OSksY2hhcig0OSkpKXdoZW4gMSB0aGVuIFRSVUUgd2hlbiAyIHRoZW4gc2xlZXAoMikgd2hlbiAzIHRoZW4gc2xlZXAoNCkgd2hlbiA0IHRoZW4gc2xlZXAoNikgZW5kKSBmcm9tIG1lbWJyZXMgd2hlcmUgaWQ9MSk%3D HTTP/1.1" 200 1005 "-" "-"
    192.168.1.23 - - [18/Jun/2015:12:13:00 +0200] "GET /admin/?action=membres&order=QVNDLChzZWxlY3QgKGNhc2UgZmllbGQoY29uY2F0KHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDEsMSkpKSwzLDEpLHN1YnN0cmluZyhiaW4oYXNjaWkoc3Vic3RyaW5nKHBhc3N3b3JkLDEsMSkpKSw0LDEpKSxjb25jYXQoY2hhcig0OCksY2hhcig0OCkpLGNvbmNhdChjaGFyKDQ4KSxjaGFyKDQ5KSksY29uY2F0KGNoYXIoNDkpLGNoYXIoNDgpKSxjb25jYXQoY2hhcig0OSksY2hhcig0OSkpKXdoZW4gMSB0aGVuIFRSVUUgd2hlbiAyIHRoZW4gc2xlZXAoMikgd2hlbiAzIHRoZW4gc2xlZXAoNCkgd2hlbiA0IHRoZW4gc2xlZXAoNikgZW5kKSBmcm9tIG1lbWJyZXMgd2hlcmUgaWQ9MSk%3D HTTP/1.1" 200 1005 "-" "-"
    [....]

    Je voudrais decoder les ligne une par une mais je n'ai aucun idée de comment faire .
    Pour l'instant j'ai fais ceci pour recuperer la partie a dechiffrer mais je ne sais pas comment le faire ensuite ligne par ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cut -d= -f3 data|cut -d' ' -f1 | base64 -d
    mais cette commande ne decode que la premiere ligne.

    ps : Comment auriez vous recuperer les données avec sed par exemple ?

    merci

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    while read line; do base64 -d <<<"${line}";done < <(grep -Po '.*=\K[^ ]*' data)
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,

    Ton souci est plus dû à un mauvais décodage, en http, les caractères tel que '=' sont traduit en '%3D' par exemple.
    Tu dois donc d’abord filtrer ces code et les remettre au format normal.

    Si on prend ton exemple, à la fin de ta chaine, tu as %3D, qu'il faut remettre au format normal (donc '=' ) avant de soumettre à base64, ce qui donne avec sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\(^.*=\| .*\)//g;s/%3D/=/' data | base64 -d
    Cordialement.

  4. #4
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Merci pour vos réponse.

    Par contre , Disedorgue , je ne comprends pas la première partie de ton sed ... Il supprime quelque chose mais j'arrive pas à comprendre quoi exactement...

    merci !

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Il est vrai que je l'ai écrit un peu vite:
    \(...\): Capture d'argument, en cas de besoin de référence arrière (en fait, ici, c'est inutile).
    ^.*=: recherche depuis le début de la ligne (^) jusqu'au dernier signe '='
    \|: ou
    [C] .*[C/]: du premier espace jusqu'a la fin de la ligne.
    et on remplace par rien (//) si on trouve l'un ou l'autre, et on réitère (/g) tant que l'on a pas parsé toute la ligne.

    Comme la capture d'arguments ici est inutile, on peut donc simplifier:
    Mais attention, ici, la regex est vraiment limite et peut potentiellement avoir des effet de bord si toutes tes lignes ne respectent pas les règles suivantes:
    -Le début de la partie interessante doit toujours être juste après le dernier signe '='.
    -Il ne doit pas y avoir de signe '=' dans ou après la partie interessante (la première règle, le dit implicitement).
    -la partie interessante ne doit pas contenir d'espace et doit soit être suivi d'un espace soit finir la ligne.
    Cordialement.

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par Neolex Voir le message
    Voilà j'ai un petit probleme, voici mon fichier (...)
    c'est une épreuve d'un challenge en ligne ça, c'est censé se faire tout seul

    et en connaissant la suite, je pense que tu serais bien inspiré de changer de langage

  7. #7
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Oui c'est vrai je n'y ai pas pensé ...
    J'avais déjà traduit les url a la main mais je voulais une solution en script mais je n'y arrivais pas.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Si on prend ton exemple, à la fin de ta chaine, tu as %3D, qu'il faut remettre au format normal (donc '=' ) avant de soumettre à base64, ce qui donne avec sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\(^.*=\| .*\)//g;s/%3D/=/' data | base64 -d
    Du coup, une solution peut-être plus facile à lire (et plus portable):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed -e 's/^.*order=//' -e 's/%3D.*/=/' data | base64 -d
    # ou
    sed -e 's/^.*order=//;s/%3D.*/=/' data | base64 -d
    On remplace tout du début de ligne jusques et y compris à order= par rien.
    Et on remplace tout de %3D compris à la fin de ligne par =...
    sous réserve qu'il n'y ait qu'un seul %3D dans la ligne...

    Remarque: comme je suis sous macOS et que, en conséquence, je n'ai droit qu'à un "sed" bas de gamme (entendez non-gnu), sans possibilité de | dans une substitution, la solution proposée par disedorgue ne fonctionne pas, alors que la mienne marche un peu mieux... à condition de mettre base64 -D...

    D'ailleurs, la fonction "usage" de "base64" est quelque peu beuguée sous macOS (contrairement au man):
    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
    $ base64 -d
    base64: invalid option -- d
    Usage:	base64 [-dhvD] [-b num] [-i in_file] [-o out_file]
      -h, --help     display this message
      -D, --decode   decodes input
      -b, --break    break encoded string into num character lines
      -i, --input    input file (default: "-" for stdin)
      -o, --output   output file (default: "-" for stdout)
    
    $ base64 -v
    base64: invalid option -- v
    Usage:	base64 [-dhvD] [-b num] [-i in_file] [-o out_file]
      -h, --help     display this message
      -D, --decode   decodes input
      -b, --break    break encoded string into num character lines
      -i, --input    input file (default: "-" for stdin)
      -o, --output   output file (default: "-" for stdout)
    De plus, chez moi, ça ne décode qu'une seule ligne (sauf si on met un while read)

  9. #9
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Merci pour votre aide.

    Par contre j'obtiens un fichier umbuvable avec totute les requetes SQL a la suite et non ligne par ligne comme je voudrais :/

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Neolex Voir le message
    Merci pour votre aide.

    Par contre j'obtiens un fichier umbuvable avec totute les requetes SQL a la suite et non ligne par ligne comme je voudrais :/
    Si tu veux de l'aide, pourrais-tu résumer où tu en es:
    • Quel est le contexte?
    • Quelle est l'entrée?
    • Quelle est la sortie attendue?
    • Qu'as-tu essayé?
    • Qu'as-tu obtenu?

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. Opération sur un fichier et lecture ligne par ligne
    Par teunniq dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 03/06/2014, 17h57
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44

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