funcprot(0);

function chiffre=monoAlpha(tabPermut, mess)
  // fonction qui effectue le chiffrement par substitution mono alphabétique
  // arguments :
  // - tabPermut : le tableau d'entiers de 0 à 25 qui représente la permutation des caractères d'alphabet
  // - mess : chaine de caractères qui représente le message à coder
  // on transforme le message en tableau de codes ascii des caractères qui le composent 
   
   tabAscii=ascii(mess);
   
   // On enlève 65, le code ascii de A majuscule
   // ainsi tabAscii contient les numéros des caractères dans l'alphabet entre 0 et 25
   
  tabAscii= tabAscii-65;
 
  // On parcourt le tableau des codes 
  // chaque caractère doit être remplacé par celui qui lui correspond dans la table de permutation
  // On doit donc écrire à sa place dans tabAscii le numéro du caractère
  for i=1:length(tabAscii)
    if(tabAscii(i)<>-33)

    // Comme les indices des tableaux dans Scilab commencent à 1
    // on ajoute 1 au numéro du caractère courant dans l'alphabet 
    // pour trouver celui qui doit le remplacer dans la table de permutation
      indice=tabAscii(i)+1;
    // on remplace le caractère par celui qui lui correspond dans l'alphabet permuté
      tabAscii(i)=tabPermut(indice);
    end
  end
  // on revient aux vrais codes ascii avant de les transformer 
  // en chaîne de caractères 
  chiffre=ascii(tabAscii+65);
endfunction

function mess=DecodeMonoALpha(tabPermut, chiffre)
  // fonction qui effectue le déchiffrement d'un chiffre monoalphabétique
  // arguments :
  // - tabPermut : le tableau d'entiers de 0 à 25  qui représente la permutation appliquée 
  // - chiffre : chaine de caractères qui représente le message chiffré
  
  // on transforme le message en tableau de codes ascii des caractères qui le composent 
  // et on enlève 65 comme dans l'algorithme de chiffrement
  tabAscii=ascii(chiffre)-65;
  
  // on va construire une table de permutation inverse 
  // avec cette table l'algorithme de déchiffrement sera le même que celui de chiffrement
  
  tabPermutInverse=zeros(size(tabPermut));
  for i=0:25
    tabPermutInverse(i+1)=find(tabPermut==i)-1;
  end
  
  for i=1:length(tabAscii)
    if(tabAscii(i)<>-33)
    // Comme les indices de stableaux dans Scilab commencent à 1
    // on ajoute 1 au numéro du caractère courant dans l'alphabet 
    // pour trouver celui qui doit le remplacer dans la table de permutation
      indice=tabAscii(i)+1;
    // on remplace le caractère par celui qui lui correspond dans l'alphabet permuté
      tabAscii(i)=tabPermutInverse(indice);
    end
  end
  
   mess=ascii(tabAscii+65);
endfunction


mess="MON JOLI MESSAGE A CHIFFRER"
cle=[2 0 1 4 3 6 5 9 8 7 12 13 11 15 14 17 16 19 18 22 23 21 25 24 10]

disp(mess);
ch=monoAlpha(cle,mess)
disp(ch);
messDechiffre=DecodeMonoALpha(cle,ch)
disp(messDechiffre);
 