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. #21
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    @hizoka: oui c'est passwd (j'ai loupé mon copier/coller ...)

    sinon, un exemple en perl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo -e "titi toto\ninsert into table1 ( id, nom, prenom ) values ( 1, 'toto', 'tata' );" | perl -F'\(' -ane 'if ($_ =~ /table1/) { @b=split /\x27/ , @F[2]; $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$AZERTY"))[3],0,14)."\x27";$b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$AZERTY"))[3],0,14)."\x27";$_=join("",$F[0]."(".$F[1]."(",@b) ;} print'
    titi toto
    insert into table1 ( id, nom, prenom ) values ( 1, '2LYnjdDbzDiIoy', 'p29gFqKXgcfuyj' );
    Reste plus qu'à écrire le if pour table2

    En plus lisible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ echo -e "titi toto\ninsert into table1 ( id, nom, prenom ) values ( 1, 'toto', 'tata' );" | perl -F'\(' -ane '
    if ($_ =~ /table1/) { 
    @b=split /\x27/ , @F[2]; 
    $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$AZERTY"))[3],0,14)."\x27";
    $b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$AZERTY"))[3],0,14)."\x27";
    $_=join("",$F[0]."(".$F[1]."(",@b);
    } 
    print'
    titi toto
    insert into table1 ( id, nom, prenom ) values ( 1, '2LYnjdDbzDiIoy', 'p29gFqKXgcfuyj' );
    Cordialement.

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

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    bonjour à vous tous,
    finalement , l'utilisateur qui nous donnera la fichier d'export ne veut pas que l'on touche à sa base de donnée.
    Donc, il faut modifier le fichier d'export.
    Je vais travailler sur la lecture du fichier ligne par ligne et recréer un fichier avec les données anonymisées.

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

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    bonjour,
    suite à différentes lectures , j'arrive bien à refaire mon fichier mais je bloque sur un retour chariot :
    mon fichier de départ :
    test
    insert into table1 ( id, nom, prenom ) values ( 1, 'nom1', 'prenom1');
    insert into table1 ( id, nom, prenom ) values ( 1, 'nom2', 'prenom2');
    insert into table1 ( id, nom, prenom ) values ( 1, 'nom3', 'prenom3');
    insert into table1 ( id, nom, prenom ) values ( 1, 'nom4', 'prenom4');
    test2
    insert into table2 ( id, nom, prenom, adresse ) values ( 1, 'nom1', 'prenom1', 'adresse1');
    insert into table2 ( id, nom, prenom, adresse ) values ( 1, 'nom2', 'prenom2', 'adresse1');
    insert into table2 ( id, nom, prenom, adresse ) values ( 1, 'nom3', 'prenom3', 'adresse1');
    insert into table2 ( id, nom, prenom, adresse ) values ( 1, 'nom4', 'prenom4', 'adresse1');
    mon essai de l'exécutable :
    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
    clear
    awk ' BEGIN {
       FS="(" }
        ( $1 !~ /table/ ) { 
          print $0;
          }
        ( $1 ~ /table1/ ) { 
          split($3,b,"\x27");
            print $1,"(",$2, "(",b[1],"\x27" 
              command="echo "b[2]"|md5sum" ;command | getline b[2]; close(command);
               print b[2];
          }
        ( $1 ~ /table2/ ) { 
          split($3,b,"\x27");
            print b[2],b[4],b[6];
            command="echo "b[2]"|md5sum" ;command | getline b[2]; close(command);
            print b[2] ;
          }
      END { print "fin" } ' test.sql  > test_1.sql
    ################################
    mon fichier résultat :
    test
    insert into table1 ( id, nom, prenom ) values ( 1, '
    fe2850b21684dc60d37cbfd8171ab477 -
    insert into table1 ( id, nom, prenom ) values ( 1, '
    af417f05e99ff1b2266358bd608ecf6d -
    insert into table1 ( id, nom, prenom ) values ( 1, '
    4e56f5f82634539a29792e721b42df3e -
    insert into table1 ( id, nom, prenom ) values ( 1, '
    2d1b096f54ef3b1a11aaad15beed1fa3 -
    test2
    nom1 prenom1 adresse1
    fe2850b21684dc60d37cbfd8171ab477 -
    nom2 prenom2 adresse1
    af417f05e99ff1b2266358bd608ecf6d -
    nom3 prenom3 adresse1
    4e56f5f82634539a29792e721b42df3e -
    nom4 prenom4 adresse1
    2d1b096f54ef3b1a11aaad15beed1fa3 -
    fin
    pourriez-vous m'aider à retirer le retour chariot au niveau des lignes de la table1 ?

    Si vous savez optimiser le code , n'hésitez pas.

    je ne maitrise pas trop awk.

    stephane

  4. #24
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Perso, je t'ai donné une solution en perl qui fait tout le boulot pour table1, il reste juste à rajoute un autre bloc if pour la table2 et avant le print.

    Sinon, celui-ci en l'état, ne modifie que les lignes avec table1 et reconduit le autres lignes sans y toucher.

    Et selon moi, il sera plus rapide que ton awk qui lance autant de fois un process md5sum qu'il y a de modification à faire.
    Cordialement.

  5. #25
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    "print" fait un retour à la ligne. Pas "printf".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s ( %s ( %s \x27",$1,$2,b[1])
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Bonjour disedorgue ,
    le code devient donc :
    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
    $ echo -e "titi toto\ninsert into table1 ( id, nom, prenom ) values ( 1, 'toto', 'tata' );" | perl -F'\(' -ane '
    if ($_ =~ /table1/) { 
    @b=split /\x27/ , @F[2]; 
    $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$AZERTY"))[3],0,14)."\x27";
    $b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$AZERTY"))[3],0,14)."\x27";
    $_=join("",$F[0]."(".$F[1]."(",@b);
    } 
    if ($_ =~ /table2/) { 
    @b=split /\x27/ , @F[2]; 
    $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$AZERTY"))[3],0,14)."\x27";
    $b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$AZERTY"))[3],0,14)."\x27";
    $b[5]="\x27".substr((split /\$/,crypt($b[5],"\$5\$AZERTY"))[3],0,14)."\x27";
    $_=join("",$F[0]."(".$F[1]."(",@b);
    } 
    print > resultat.txt'
    La sortie est bien Par contre comment indiqué le fichier départ et que toutes les lignes soient bien lues.

  7. #27
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Voici un exemple:
    Le fichier source:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat fic1.txt
    ICI Une ligne quelconque
    insert into table2 ( id, nom, prenom ) values ( 1, 'toto', 'tata' ,'tutu' );
    autre ligne quelconque
    insert into table1 ( id, nom, prenom ) values ( 1, 'toto', 'tata' );"
    encore une
    et une autre
    La commande:
    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
    $ perl -F'\(' -ane '
    if ($_ =~ /table1/) {
    @b=split /\x27/ , @F[2];
    $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$AZERTY"))[3],0,14)."\x27";
    $b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$AZERTY"))[3],0,14)."\x27";
    $_=join("",$F[0]."(".$F[1]."(",@b);
    }
    if ($_ =~ /table2/) {
    @b=split /\x27/ , @F[2];
    $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$AZERTY"))[3],0,14)."\x27";
    $b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$AZERTY"))[3],0,14)."\x27";
    $b[5]="\x27".substr((split /\$/,crypt($b[5],"\$5\$AZERTY"))[3],0,14)."\x27";
    $_=join("",$F[0]."(".$F[1]."(",@b);
    }
    print' fic1.txt >resultat.txt
    Le fichier resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat resultat.txt
    ICI Une ligne quelconque
    insert into table2 ( id, nom, prenom ) values ( 1, '2LYnjdDbzDiIoy', 'p29gFqKXgcfuyj' ,'xTlILtmiNl7ZuG' );
    autre ligne quelconque
    insert into table1 ( id, nom, prenom ) values ( 1, '2LYnjdDbzDiIoy', 'p29gFqKXgcfuyj' );"
    encore une
    et une autre
    Après, ne pas oublier de changer la clé de hash (AZERTY ici).
    Et un petit détail, dans le hash, on peut avoir des '.' ou des '/' qu'il faudra peut-être retirer s'ils ne sont pas accepté par la bdd.
    Cordialement.

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

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Merci beaucoup , cela fonctionne parfaitement.
    Il me reste à faire les ajustement .

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

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Question complémentaire si a la place de azerty, on souhaite le numéro du jours
    Comment faire ?

  10. #30
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Comprend pas la question, suffit juste de mettre la chaine que l'on veut à la place, par exemple
    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crypt($b[1],"\$5\$AZERTY"))
    on met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crypt($b[1],"\$5\$20201113"))
    Cordialement.

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

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    oui, j'avais fais des tests, mais en fait je voudrais que cela soit dynamique .
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crypt($b[1],"\$5\donnéesChoisiParLutilisateur"))
    j'execute le ksh suivant :
    le traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crypt($b[1],"\$5\$lundi"))
    Travaillant quasiment sur sql, je ne connais pas bien le shell.
    Je te remercie énormément pour ton aide.

  12. #32
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Ok, dans ce cas, on peut comme suit:
    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
    perl -F'\(' -ane '
    BEGIN{$XX=shift;}
    if ($_ =~ /table1/) {
    @b=split /\x27/ , @F[2];
    $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$$XX"))[3],0,14)."\x27";
    $b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$$XX"))[3],0,14)."\x27";
    $_=join("",$F[0]."(".$F[1]."(",@b);
    }
    if ($_ =~ /table2/) {
    @b=split /\x27/ , @F[2];
    $b[1]="\x27".substr((split /\$/,crypt($b[1],"\$5\$$XX"))[3],0,14)."\x27";
    $b[3]="\x27".substr((split /\$/,crypt($b[3],"\$5\$$XX"))[3],0,14)."\x27";
    $b[5]="\x27".substr((split /\$/,crypt($b[5],"\$5\$$XX"))[3],0,14)."\x27";
    $_=join("",$F[0]."(".$F[1]."(",@b);
    }
    print' AZERTY fic1.txt >resultat.txt
    ici, le script prendra AZERTY comme clé de hash, mais si tu remplaces le mot AZERTY par (dans ton cas) "$1" (on garde les guillemets) , ça devrait le faire, puisqu'en shell le $1 représente le premier argument qui dans ton exemple est lundi.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

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

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