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
|
#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