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

C++ Discussion :

probleme avec la compilation de openssl


Sujet :

C++

  1. #1
    Membre régulier Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Points : 96
    Points
    96
    Par défaut probleme avec la compilation de openssl
    bonjour
    je veux crypter mes fichier perso en aes 128 avec openssl ,je suis debutant en c++ ,alors j'ai trouver un code sur le net ,et apres l'avoire modifier selon mes besoins quand je le compile j'obtien :

    C:\Users\Animalx\AppData\Local\Temp\ccgTRryo.o hola.cpp.text+0x3ba): undefined reference to `AES_set_encrypt_key'
    C:\Users\Animalx\AppData\Local\Temp\ccgTRryo.o hola.cpp.text+0x431): undefined reference to `AES_cfb128_encrypt'
    C:\Users\Animalx\Documents\collect2.exe [Error] ld returned 1 exit status
    et meme avec le code d'origine c'est la meme erreur , j'ai fait des recherehe sur le net et l'erreur vient d'une mal installation de la lib openssl mais je l'ai reinstaller avec les dll et les include etc mais c'est pareille.
    voici mon code :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #include <iostream>
    #include<fstream>
    #include <stdlib.h>
    #include<string.h>
    #include <stdio.h>
    #include<vector>
    #include <openssl/evp.h>
    #include <openssl/aes.h>
     
    using namespace std;
     
    int tex (const char fi[]);
    void enc();
     
     
    int main(){
    	string ch ="hhhhhh.bdd";
    	const char *chh= ch.c_str();
    	cout<<tex(chh)<<endl;
     
     
    	return 0;
    }
     
    int tex (const char fi[]){
    	string hh[]={".mp3",".jpeg",".txt",".py",".bdd"};
    	char *p ;
        p = strrchr(fi, '.');
        int r =0;
    	for(int i (0);i<5;i++){
    		if(!strcmp(p, hh[i].c_str())) r=1;		
    	} 
    	    return r;  	
    	}
     
     
     
    void enc()
    {
      int bytes_read, bytes_written;
      unsigned char indata[AES_BLOCK_SIZE];
      unsigned char outdata[AES_BLOCK_SIZE];
     
      /* ckey and ivec are the two 128-bits keys necesary to
         en- and recrypt your data.  Note that ckey can be
         192 or 256 bits as well */
      const unsigned char ckey[] =  "thiskeyisverybad";
      unsigned char ivec[] = "dontusethisinput";
      FILE *ifp = fopen("C:\\Users\\Animalx\\Desktop\\Nouveau dossier\\Visual Studio 2017 (2).exe", "rb");
      FILE *ofp = fopen("C:\\Users\\Animalx\\Desktop\\Nouveau dossier\\output_file.enc", "wb");
     
      /* data structure that contains the key itself */
     AES_KEY key;
     
      /* set the encryption key */
      AES_set_encrypt_key(ckey, 128, &key);
     
      /* set where on the 128 bit encrypted block to begin encryption*/
      int num = 0;
     
      while (1) {
        bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);
     
        AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
               AES_ENCRYPT);
     
        bytes_written = fwrite(outdata, 1, bytes_read, ofp);
        if (bytes_read < AES_BLOCK_SIZE)
      break;
     
      }
     
    }
    merci de m'aider

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    salut,

    De manière générale, les erreurs de type "undefined reference to" sont des erreurs qui surivennent à l'édition de liens.

    Pour faire simple: le compilateur va uniquement générer le code binaire exécutable de chaque fichier d'implémentation (ceux avec l'extension .cpp) qu'on va lui indiquer, et il va s'arrêter là. Le résultat de ce travail est appelé "fichier objet", et, vu que tu sembles utiliser g++ comme compilateur, leur extension sera sans doute en .o.

    Une fois que tous les fichiers objets auront été générés, un autre outil appelé "éditeur de liens" va prendre le relais. En gros, il va regrouper l'ensemble des fichiers objets qu'on lui indique dans un exécutable final.

    Ce faisant, et parce que tout n'est jamais qu'adresse mémoire dans un ordinateur, il va faire correspondre les appels de fonction qu'il rencontre avec l'adresse à laquelle se trouve le début de la fonction appelée.

    Evidemment, s'il ne trouve pas l'adresse d'une fonction qui est appelée, il n'aura pas d'autre choix que de s'arrêter après avoir émis ce genre de message.

    Dans le cas présent, le nom AES_xxx nous indique qu'il s'agit d'une des fonctions fournies par la bibliothèque openssl. Et, a priori, s'il ne trouve pas une fonction fournie par une "bibliothèque externe" comme openssl, c'est généralement "tout simplement" parce que l'on ne lui a pas dit d'aller voir dans la bibliothèque en question s'il y trouvait des "fonctions intéressantes".

    Pour corriger le problème, il faut:
    1. indiquer à l'éditeur de liens dans quel dossier il pourra trouver la bibliothèque qui nous intéresse (sans doute libopenssl.a) en rajoutant l'option de compilation -L<chemin_vers_le_dossier> ( à moins que le fichier en question ne soit dans un dossier qui est déjà connu pour contenir des bibliothèque, bien sur ) et
    2. indiquer à l'éditeur de liens qu'il doit aller voir dans la bibliothèque qui nous intéresse (libopennssl.a, dans le cas présent) en rajoutant l'option de compilation -lopenssl (attention: c'est un L minuscule )

    Bien sur, l'endroit où il faudra ajouter ces options de compilation dépendra de ton EDI ou des outils de configuration de projet que tu utilises, car chacun fait à peu près "à sa sauce"... Pour pouvoir t'en dire plus, il faudra que nous sachions de quelle manière tu gères ton projet
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre régulier Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Points : 96
    Points
    96
    Par défaut
    effictivment les fichier de la lib etait en .lib et mon compilateur g++ ne prend en charge que les .a alors j'ai bien chercher sur le net pour me procurer le (libcrypto.a et un autre ) mais le proboleme survien toujours,
    alors j'ai essayer de donnee l'adresse de la lib a l'editeur de lien (comme votre explication) mais c'est la que je coince car je ne comprend pas la syntaxe sous dev c++ 5.11 et la documentation pour dev est pluto pauvre sur le net ,
    merci de m'eclaircire sur le sujet .

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    bon, pour ce qui est du .lib, c'est typiquement l'extension utilisée par les outils microsoft (et d'autres), or, ta chaine de compilation est ... celle que l'on retrouve sous linux (gcc / g++ et ld).

    A priori, tu n'arriveras pas à utiliser openssl.lib avec les outils dont tu disposes. Tu dois donc envisager de... compiler openssl avec ta suite d'outils.

    Manque de pot, pour pouvoir le compiler, il est plus que probable que tu doive envisager l'installation de msys2...

    Tout cela n'est pas trop compliqué à priori, seulement, étant donné que tu me semble heu... quelque peu novice (cela étant dit sans offence), je vais sans doute te poser une question idiote, mais: as tu vraiment besoin de libopenssl pour ton projet, ou n'est ce que, justement, pour essayer et "voir ce que ca donne" ?
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre régulier Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Points : 96
    Points
    96
    Par défaut
    moi mon but est de cree un petit programe qui crypte les fichier qui se trouve dans le meme dossier que lui, alors j'ais chercher dans les lib et j'ai trouver crypto++ qui semble interesnt, mais je trouve pas les lib et dll dans le package telechargable dans le site ,(que les include et des fichier .dat que je ne comprend pas ),alors je me suis tourner sur openssl que je suis entraint d'essayer de resoudre ces probleme de compilation , et si vous avez une suggestion de bibliotheque ou une critique ou solution ,je suis ravie de votre aide ,
    merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec le compiler
    Par zell61 dans le forum Cobol
    Réponses: 5
    Dernier message: 09/05/2013, 16h32
  2. Probleme avec PHPmyvisit (compilation php avec GD2 pour utiliser Artichow)
    Par chaoued dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 24/07/2009, 11h28
  3. Probleme avec la compilation
    Par agougeon dans le forum Jasper
    Réponses: 4
    Dernier message: 16/03/2007, 10h04
  4. Problème avec a.exe, requis pour compiler
    Par jejerome dans le forum KDE
    Réponses: 4
    Dernier message: 15/04/2006, 23h28
  5. [Borland CPP Compiler] Probleme avec !! Path !!
    Par kanzarih dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 20/10/2004, 23h07

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