Cryptage de données d'un fichier [Résolu]

Signaler
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010
-
raphchar
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010
-
Bonjour
Je souhaiterai créer un programme pour crypter un fichier quelconque. Pour cela je voulais passer par la suite d'octes qui composent le fichier, donc obtenir le fichier sous la forme d'une suite de nombres ( 0 à 255 ). Au final, je dois aussi reenregistrer ce fichier au décryptage, donc faire l'opération inverse. Comment dois-je faire pour cela?

Raphaël programeur en C++

11 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
Salut,

Toutes les fonctions nécessaire sont documentées sur ce site.
Voilà un début de prog :
<hr size="2" width="100%" />#include
#include <fstream>

using namespace std;

int main ()
{
  int length;
  char *buffer;
  int i;

  ifstream is;
  is.open("test.txt", ios::binary );

  // Récupération de la taille du fichier
  is.seekg(0, ios::end);
  length = is.tellg();
  is.seekg(0, ios::beg);

  // Allocation d'une zone de la taille du fichier
  buffer = new char[length];

  // Lecture de tout le fichier
  is.read(buffer, length);
  is.close();
 
  // Affichage des caractères en décimal
  for (i = 0; i < length; i++)
    cout << (int)buffer[i] << " ";

  delete[] buffer;
  return 0;
}
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
Ah heu vi c'est normal s'il considère que tes chars sont signés. Donc si tu veux pas de négatif, utilise des unsigned char.

  unsigned char *buffer;
  ...
  buffer = new unsigned char[length];
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010

merci beaucoup

Raphaël programeur en C++
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010

Nouveau problème:
Je travaille avec les applications MFC, et je ne sais pas comment convertir de CString à char*. Quelqu'un peut-il m'aider?

Raphaël programeur en C++
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010

Salut rt15,

Tout algorithme a l'air correct, mais je me heurte à un problème
buffer = new char[length];
le tableau n'est pas assez grand length vaut -1!!

Raphaël programeur en C++
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
Le bouton "réponse acceptée", c'est pas pour dire que tu accepte la réponse, mais pour dire que c'est la (ou les) réponse(s) qui t'ont aider à résoudre ton problème.

Si length vaut -1, c'est que le fichier était vide... Donc pas besoin de faire un tableau !
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010

Le fichier faisait en fait 36 Ko.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
Ah...

  is.seekg(0, ios::end);
  length = is.tellg();

a fait n'importe quoi alors ? tellg renvoie -1 en cas d'erreur.
Peut être un problème à l'ouverture du fichier.

Tu peux utiliser fail pour t'assurer que l'ouverture s'est bien passée.
<hr size="2" width="100%" />  ifstream is;
  is.open("test.txt", ios::binary );
  if (is.fail())
  {
    is.close();
    cout << "Erreur à l'ouverture" << endl;
    return 1;
  }
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010

Bon, c'est bon. J'ai corrigé.
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010

Est-ce norml qu'il y ait des valeurs négatives?
Messages postés
22
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
19 juin 2010

D'accord, de toutes façons ce n'est pas grave le programme fonctionne quand même.

Raphaël programeur en C++