| 12
 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
 
 |  
#include <stdio.h>
 
typedef union
{
   unsigned long long l;
   char c[8];
}
i64_u;
 
unsigned char IP[64] = {
   58, 50, 42, 34, 26, 18, 10, 2,
   60, 52, 44, 36, 28, 20, 12, 4,
   62, 54, 46, 38, 30, 22, 14, 6,
   64, 56, 48, 40, 32, 24, 16, 8,
   57, 49, 41, 33, 25, 17, 9, 1,
   59, 51, 43, 35, 27, 19, 11, 3,
   61, 53, 45, 37, 29, 21, 13, 5,
   63, 55, 47, 39, 31, 23, 15, 7,
};
 
void permut (char a_chiffrer[], i64_u * p_permute)
{
   i64_u bitabouger;
int i;
   bitabouger.l = 1;
   p_permute->l = 0;
   for (i = 0; i <= 63; i++)
   {
      p_permute->l =
         p_permute->l | ((bitabouger.l & a_chiffrer[i % 8]) << IP[i]);
      bitabouger.l = bitabouger.l << 1;
   }
}
 
int main (int argc, char *argv[])
{
   if (argc > 1)
   {
      i64_u binaire_transforme;
 
      permut (argv[1], &binaire_transforme);
      printf ("%s - ", argv[1]);
      {
         int i;
         for (i = 0; i < 8; i++)
         {
            printf ("%02X ", (unsigned char)binaire_transforme.c[i]);
         }
         printf ("\n");
      }
   }
   return 0;
} | 
Partager