salut ,je cherche des commande en c ou c++ qui permet de diviser le mot octect en des bit pour l'algorithme de cryptage DES
Version imprimable
salut ,je cherche des commande en c ou c++ qui permet de diviser le mot octect en des bit pour l'algorithme de cryptage DES
Tu peux essayer une structure avec 8 champs de bits de un bit et tu decomposes ton octet avec les decalages de bits.
Il y a peut etre une meilleur solution, attendons de voir.
Code:
1
2
3
4
5
6
7
8
9
10
11 typedef struct { unsigned a:1; unsigned b:1; unsigned c:1; unsigned d:1; unsigned e:1; unsigned f:1; unsigned g:1; unsigned h:1; }Bit;
Tu ne peux pas "manipuler" directement un bit et lui faire subir des opérations quelconques. Tu peux passer par un champ de bits comme le montre Skyrunner mais celà pose plusieur problèmes:
- la norme ne garantit nullement que la taille de ta struct sera la taille minimale nécessaire pour contenir les 8 bits. En gros, ta struct peut faire plus d'un octet, même si tu ne peux accéder et modifier que 8 de ses bits.
- Enfin, écrire directement une struct dans un fichier n'est pas une bonne chose.
Il te faut ouvrir les fichiers que tu veux traités en mode binaire, puis extraire les bytes (!= octet dans le cas général, mais si tu travailles sur un x86 c'est la même chose. Vérifie ce que vaut ta macro CHAR_BITS pour être sur) à l'aide de fread.
Ensuite, tu les considères comme des unsigned char au lieu de simple char, ce qui te permettra de les manipuler avec les opérateurs sur les bits (>>, <<, |, &, ~).
Tu peux ensuite extraire des bits, en stockant leur valeur dans un unsigned char par exemple, et travailler dessus, en faisant bien attention de garder des valeurs cohérentes (0 ou 1).
Il faut ensuite restocker tous tes bits dans des unsigned char (autant que tu en as lu dans le fichier original) toujours à l'aide des opérateurs, et les écrire dans le fichier de sortie à l'aide de fwrite.
Le problème des champs de bits est que l'ordre des bits ainsi que la taillle de la structure dépend de l'implémentation. Il vaut mieux utiliser les opérateurs bits qui sont portables.Citation:
Envoyé par Skyrunner
Grillaid!
Oui mais lui il veut travailler avec les bits si j'ai bien compris.
Donc si dans son code il fait comme ca
Il saura tres bien ce qu'il y aura dans les champs de sa structure non?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 typedef struct { unsigned a:1; unsigned b:1; unsigned c:1; unsigned d:1; unsigned e:1; unsigned f:1; unsigned g:1; unsigned h:1; }Bit; void fonction(void) { char test='a'; Bit decompo; decompo.a = test << 1; decompo.b = test << 1; decompo.c = test << 1; ... }
Kesako?Citation:
Grillaid!
Tu veux dire si il fait :Citation:
Envoyé par Skyrunner
Dans ce cas là, oui, effectivement. Il faudra ensuite une fonction similaire pourCode:
1
2
3
4
5
6
7
8 void fonction(void) { unsigned char test='a'; Bit decompo; decompo.a = test & 0x1; decompo.b = (test << 1) & 0x1; decompo.c = (test << 2) & 0x1; ... }
re-remplir les char. Mais je sais pas si c'est vraiment plus pratique dans le cas d'un algorithme de chiffrement tel que le DES.
Oups exact. (sacré copier-coller)Citation:
Tu veux dire si il fait :
Code:
1
2
3
4
5
6
7
8 void fonction(void) { unsigned char test='a'; Bit decompo; decompo.a = test & 0x1; decompo.b = (test << 1) & 0x1; decompo.c = (test << 2) & 0x1; ... }