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 :

Crypter une chaine de caractères en shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut Crypter une chaine de caractères en shell
    bonjour, je dois ( dans le cadre d'un projet ) modifier un fichier txt comprenant des noms de personnes.
    Je souhaite donc faire via un ksh un nouveau fichier qui reprenait toutes les informations mais qui crypterait ( modifierait ) le nom.
    Je lance exécutable avec comme paramètre un mot et le traitement modifie le nom.

    J'ai toutes les informations et l'exécutable pour récupérer les informations. Par contre, je ne sais pas comment crypter le nom .

    Pourriez-vous m'aider ?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 722
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 722
    Par défaut
    Bonjour,

    l'exposé est déjà cryptique*.

    un petit exemple, s'il te plaît ?

    --
    * en français, on parle de "chiffrement".

  3. #3
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut
    Bonjour, en me relisant, c'est exact.
    J'ai un fichier qui est un export d'une base sql ( contient donc des insert into table ..... )
    Dans certaines tables, les données sont confidentielles et ne doivent pas être fournies à des personnes tierce. mais nous nous servons de cette export pour travailler.

    Je souhaite donc modifier ce fichier txt car je n'ai pas envie d'installer la base de données puis de faire des update ( update table set valeur = md5(.... ) pour chaque table).

    Je voudrait donc créer un ksh qui retravailler mon fichier sql .

    Avec awk, je peux sélectionner chaque champ à modifier et créer un nouveau fichier . Par contre je ne sais pas chiffrer les données.

    Avant traitement la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table1 ( id, nom, prenom ) values ( 1, 'toto', 'tata' );
    après traitement la ligne devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table1 ( id, nom, prenom ) values ( 1, 'kdjhgnhgmhem32g13dg5q', 'g5461g41rg4q4546' );
    kdjhgnhgmhem32g13dg5q est le chiffrement de toto en md5 avec un mot passé en paramètre
    g5461g41rg4q4546 est le chiffrement de tata en md5 avec un mot passé en paramètre


    Ma question :
    comment modifier toto en kdjhgnhgmhem32g13dg5q ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Novembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2020
    Messages : 25
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    l'exposé est déjà cryptique*.

    un petit exemple, s'il te plaît ?

    --
    * en français, on parle de "chiffrement".
    Bonjour,

    Le chiffrage c'est pour un devis, d'où le quiproquo suivant (c'est de moi, pardonnes le mauvais humour)
    - salut, je veux faire un chiffrage de mes données ?
    - ah tu les vends combien ?
    - pardon, non je veux les protéger
    - donc tu ne veux pas les vendre alors ?

    Crypter/cryptage voudrais dire qu'on a chiffré (avec une clé de chiffrement) mais que la clé de chiffrement on l'oublie tout de suite après.

    Par contre décrypter oui (au sens de cryptanalyse) car il s'agit de déchiffrer un message dont on a pas la clé, et ça se fait...

    Enfin encoder n'est pas chiffrer (là encore très bien expliqué) car dans l'encodage il n'y a pas de notion de confidentialité donc pas de chiffrement mais de l'organisation dans un certain format. Ainsi si on encode des données pour les protéger, c'est mal parti (et là encore ça se voit malheureusement).

    Cela étant dit, tu veux chiffrer le champ nom d'un fichier

    Fichier.txt

    Nom Prénom Age
    Dupont Marc 25
    Durand Gilles 32

    Fichier.$$$

    Nom Prénom Age
    gpezotgjpdzopvofkz Marc 25
    p"optojkzpokrpozrz Gilles 32

    ou alors tu veux chiffrer tout le fichier ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut
    pour répondre à clearscreen, on doit chiffrer que certaines valeurs et non pas tout le fichier.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 722
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 722
    Par défaut
    pourquoi un mot de passe ? ça doit pouvoir être réversible ?

    je n'ai pas envie d'installer la base de données puis de faire des update ( update table set valeur = md5(.... ) pour chaque table).
    oh ben oui, pourquoi faire simple !?
    pourtant, ça se scripterait facilement.

  7. #7
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut
    Bonsoir, parce que cela veut dire, faire un dump, installer ce dump sur un autre serveur, lancer le script, refaire un dump.
    En répondant, c'est aussi une possibilité à étudier.
    Par contre, je souhaite quand même une solution à la 1re hypothèse.
    Cdt
    PS : cela n'a pas besoin d'être réversible.

  8. #8
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 417
    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 417
    Par défaut
    Une petite aide: ici on hash foobar avec md5 (\$5) avec la clé de hash AZERTY (\$AZERTY) et le hash sera se qui se trouve après le derniers $ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -e 'print crypt("foobar","\$5\$AZERTY")."\n"'
    $5$AZERTY$fbMAux8fhvSKzfNpw/ncW8JszXfMkmu1pmykkEYv4T0
    donc:
    type de hash => 5 (md5)
    Clé de hash => AZERTY
    hash => fbMAux8fhvSKzfNpw/ncW8JszXfMkmu1pmykkEYv4T0

  9. #9
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut,

    perso, je ferais un truc du genre :
    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
    while read ligne
    do
        champs="${ligne#*\'}"
        champ1="${champs%%\'*}"
        champ2="${champs#*\'*\'}"
        champ2="${champ2%%\'*}"
     
        champ1_md5=$(md5sum <<< "${champ1}")
        champ1_md5="${champ1_md5/%  -}"
        champ2_md5=$(md5sum <<< "${champ2}")
        champ2_md5="${champ2_md5/%  -}"
     
        nouvelle_ligne="${ligne/\'${champ1}\'/\'${champ1_md5}\'}"
        nouvelle_ligne="${nouvelle_ligne/\'${champ2}\'/\'${champ2_md5}\'}"
     
        echo "${nouvelle_ligne}"
    done < fichier > fichier_chiffre
    ce qui donnerait avec ton exemple :
    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
    ligne="insert into table1 ( id, nom, prenom ) values ( 1, 'toto', 'tata' );"
     
    champs="${ligne#*\'}"
    champ1="${champs%%\'*}"
    champ2="${champs#*\'*\'}"
    champ2="${champ2%%\'*}"
     
    champ1_md5=$(md5sum <<< "${champ1}")
    champ1_md5="${champ1_md5/%  -}"
    champ2_md5=$(md5sum <<< "${champ2}")
    champ2_md5="${champ2_md5/%  -}"
     
    nouvelle_ligne="${ligne/\'${champ1}\'/\'${champ1_md5}\'}"
    nouvelle_ligne="${nouvelle_ligne/\'${champ2}\'/\'${champ2_md5}\'}"
     
    echo "${nouvelle_ligne}"
    => insert into table1 ( id, nom, prenom ) values ( 1, '11a3e229084349bc25d97e29393ced1d', '6ccef1b25ea58fb8be3ca1a1a744ea53' );
    Attention : tata et toto ne doivent absolument pas contenir de ' ni de saut de ligne.

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 417
    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 417
    Par défaut
    ça dépend du niveau de sécurité, car le md5sum ne permet pas de rajouter un petit "sel" lors du hash.

    L'avantage avec la solution que j'ai donné en perl (que l'on peut faire avec openssl) est que l'on choisi un "sel" (dans l'exemple, c'est AZERTY) que l'on a pas besoin de fournir dans le dump modifié.

    En gros, via le md5sum, on peut par force brut retrouver les noms prénoms, via le hash, cela sera beaucoup plus difficile, car on hash et on jette la clé (AZERTY) , donc pour reversé par force brut, ça sera beaucoup plus difficile.

  11. #11
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Oui, je suis d'accord mais c'est sa demande

  12. #12
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Et une question sûrement bête,

    si on ajoute du texte au moment du hashage, ça ne rendrait pas beaucoup plus compliqué le forcage brute ?

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    md5sum <<< "Ceci sert à noyer le code ${champ1} ici présent"

  13. #13
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 300
    Par défaut
    Bonjour

    Oui. Tu as raison. Ce que tu fais, c'est prendre un "AZERTY" plus long.

    Et si tu mets le caractère ☢ ou ⛪ ou ♁, ce sera encore plus difficile.

  14. #14
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut
    Bonjour,
    Merci à N_Bah pour cette option, nous avons choisi cette option. Elle est beaucoup plus simple et nous n'y avions pas pensé.
    Cette option fonctionne très bien.
    Par contre, je vais quand même étudier la deuxième option pour ma culture personnelle.

    Merci beaucoup pour vos aides .

  15. #15
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut
    On a trouvé une solution plus facile.
    On rajoute un mot lors du lancement du ksh qui fait le dump.
    On concat le mot avec la valeur du champ puis on fait un md5 et on prend que les 15 premiers caractères.

    Si quelqu'un arrive à retrouver les valeurs avec tous cela.

  16. #16
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 417
    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 417
    Par défaut
    Citation Envoyé par hizoka Voir le message
    Et une question sûrement bête,

    si on ajoute du texte au moment du hashage, ça ne rendrait pas beaucoup plus compliqué le forcage brute ?

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    md5sum <<< "Ceci sert à noyer le code ${champ1} ici présent"
    On casse 2 champs en force brut et on a le texte rajouté pour tous les autres...

    Mais dans ton script, si on remplace le md5sum <<< "${champ1}" par openssl password -5 -salt AZERTY "${champ1}" | cut -d \$ -f4, ça le fait.

    Bon, après, pourquoi pas.

  17. #17
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut
    Oui sauf que on enlève des caractères pour que cela puisses puisse correspondre aux champs.
    Suite au quelques tests faits cela nous convient.

  18. #18
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 417
    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 417
    Par défaut
    Je ne faisais que répondre à hizoka, car tu as choisi la solution de N_BaH...

    D'ailleurs, si sous oracle la fonction md5 retourne aussi un checksum hexadecimal (ça je ne sais pas) , as-tu pensé au collisions possibles si tu truncate la chaine ?

    Genre un nom toto serai identique au nom titi une fois passé dans la moulinette...

  19. #19
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Par défaut
    le fait de choisir la méthode sql nous expose à un deuxième soucis, le truncate du md5
    Je m'explique :
    Comme nous sommes oblige de truncate le résultat à 15 caractères, il y a effectivement un risque de doublon de données non voules.

    Nous prenons le risque car le résultat va juste servir pour les formations et les tests.

    Je vais quand même continue à travailler sur la deuxième possibilité :
    J'utilise awk pour lire le fichier texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    awk ' BEGIN {
      print "On liste les champs à modifier " ; FS="(" }
        ( $1 ~ /table1/ ) { 
          split($3,b,"\x27");
            print b[2],b[4];
     
          }
        ( $1 ~ /table2/ ) { 
          split($3,b,"\x27");
            print b[2],b[4],b[6];
          }
      END { print "fin" } ' test.sql
    j'arrive donc à afficher ceci :
    ###########################
    On liste les champs à modifier
    nom1 prenom1
    nom2 prenom2
    nom3 prenom3
    nom4 prenom4
    nom1 prenom1 adresse1
    nom2 prenom2 adresse1
    nom3 prenom3 adresse1
    nom4 prenom4 adresse1
    fin
    .

    Il me reste donc à modifier les champs puis à recréer le fichier.
    cdt

  20. #20
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    @disedorgue
    Merci, en effet, tu as raison, si tu arrives à casser 2 codes tu pourrais y arriver.
    Encore faut il les casser, en force brute ça doit prendre du temps ce genre de texte non ?

    Pas mal la commande, mais ce n'est pas passorwd mais passwd chez moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl passwd -5 -salt AZERTY
    Si je devais choisir, je partirai en effet là dessus

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Crypter une chaine de caractère
    Par davels dans le forum Delphi
    Réponses: 14
    Dernier message: 28/05/2020, 14h34
  2. Comment crypter une chaine de caractères ?
    Par Seth77 dans le forum C#
    Réponses: 9
    Dernier message: 24/06/2008, 16h18
  3. crypter une chaine de caractère
    Par tiboo dans le forum C++
    Réponses: 27
    Dernier message: 08/03/2008, 18h49
  4. [C#] crypter une chaine de caractère
    Par FraktaL dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/08/2006, 21h23
  5. Crypter une chaine de caractères
    Par Yabo dans le forum Réseau
    Réponses: 18
    Dernier message: 20/11/2004, 00h04

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