Source pour l'encodage

ATTENTION : En OpenCL les bibliothèques ne fonctionnent pas (string).

text/x-c++src encode.cpp — 3.2 KB

Contenu du fichier

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;

/************************************************
  Cette fonction effectue une substitution de
  caracteres en additionnant une valeur
************************************************/
string ADD(string mot, int cle)
{
   int taille;

   taille = mot.length();  
   for (int i=0;  i< taille; i++)
       mot[i] = mot[i]+cle*i;
   return mot;
}
/************************************************
  Cette fonction effectue un ou exclusif
  entre la chaine de caracteres et la cle  
************************************************/
string XOR(string mot, string cle)
{
   int taille;
   taille = mot.length();
   
   for (int i=0;  i< taille; i++)
       mot[i] = mot[i]^cle[i];
   return mot;
}
/*************************************************
  Cette fonction effectue un decalage circulaire 
  vers la droite de "nb" caracteres
**************************************************/
string decale(string mot, int nb)
{
  char t[nb];
  int max = mot.length()-1;

     cout << "----" << max << "..." << nb << endl;
  for(int i=0; i<nb; i++)
      t[i] = mot[max-i];
  for (int i = max; i>=nb; i--)
      mot[i] = mot[i-nb];
  for (int i=0; i<nb; i++)
      mot[i] = t[nb-i-1];
  return mot;
}
/*************************************************
  Cette fonction effectue une translation  
  entre les caracteres du mot d'une distance 
  deduite de la cle
**************************************************/
string echange(string mot, int cle)
{
  int taille = mot.length();

  for(int i=0; i+cle < taille; i++)
  { 
    char temp;
    temp = mot[i];
    mot[i] = mot[i+cle];
    mot[i+cle] = temp;
  }
  return mot;
}
/*************************************************
  Cette fonction genere une cle numerique
**************************************************/
int getCle(string mot)
{
   int cle,temp;
   temp =0;
   for (int i=0;i<mot.length() ; i++) 
       temp = temp + (unsigned int) mot[i];
   cle = (temp % 4)+1;
   cout << "La clé est .... " << cle << endl;
   return abs(cle);
}
/*************************************************
  Cette fonction encode le message
**************************************************/
string encode(string mot)
{
   string copie;
   int cle;

   copie = mot;
   for (int j=0; j<3; j++)
   {
     cle = getCle(mot);
     mot = decale(mot,cle/2);
     mot = ADD(mot,cle);
     mot = echange(mot,cle);
     mot = XOR(mot,copie); 
   }
   return mot;
}

/******************************************************
  Ce programme encode une série de mots et les placent 
  dans le fichier "password"
******************************************************/
int main()
{
   string password, copie, p1,p2,p3,p4;
   ofstream res("password", ios::out|ios::binary);
   cout << "Entrez la chaine de caractere de longueur 7"<< endl;
   cin >> password;

   while(password != "fin")
   {
      copie = password;
      password = encode(password);
      cout << endl<< " le mot encode est : " << password << endl;
      for (int i=0; i < password.length(); i++)
      {
        res.put((unsigned char)password[i]);
        cout <<  (int)password[i] << " ";
      }
      cout << "Entrez la prochaine chaine de caractere de longueur 7"<< endl;
      cin >> password;
    }
 
}