Algorithme Data Encryption Standard (DES)
Fermé
simozemaim
-
13 mai 2013 à 16:17
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 24 mai 2013 à 12:56
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 24 mai 2013 à 12:56
A voir également:
- Algorithme Data Encryption Standard (DES)
- App data - Guide
- Netflix standard avec pub - Accueil - Streaming
- Pilote son standard - Télécharger - Pilotes & Matériel
- Windows data recovery - Télécharger - Récupération de données
- Appel data zone franche ✓ - Forum Vos droits sur internet
1 réponse
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
24 mai 2013 à 12:56
24 mai 2013 à 12:56
Bonjour, comme expliqué les bits d'un bloc d'une taille de 64bits sont soumis à un changement de position au départ, la matrice est une représentation qui explique la position initiale dans laquelle mettre ces bits.
Par exemple avec bloc de 4bits : 0110
Et une matrice donnant les positions suivantes :
2 1
4 3
Le résultat en lisant les 4 bits 0110 de gauche vers la droite :
1 0
0 1
PI = 1001
puisque pos 1 = 0, pos 2 = 1, pos 3 = 1, pos 4 = 0
et le scindement' est simple on coupe le bloc de 4bits en deux de 2bits :
G0=10 et D0=01
C'est pareils avec 64bits petit bout de code :
Dans ce code vous pouvez voir une façon de repositionner les bits sur un bloc de 64bits contenu dans un type uint64_t (un unsigned int faisant obligatoirement 64bits de long) en utilisant la matrice donnant les positions des bits, la variable result est le PI de b en la coupant en deux uint32_t vous obtiendrez le "Scindement en blocs de 32 bits" ...
Par exemple avec bloc de 4bits : 0110
Et une matrice donnant les positions suivantes :
2 1
4 3
Le résultat en lisant les 4 bits 0110 de gauche vers la droite :
1 0
0 1
PI = 1001
puisque pos 1 = 0, pos 2 = 1, pos 3 = 1, pos 4 = 0
et le scindement' est simple on coupe le bloc de 4bits en deux de 2bits :
G0=10 et D0=01
C'est pareils avec 64bits petit bout de code :
#include <stdio.h> #include <stdint.h> uint64_t permutation_initiale(uint64_t b) { uint64_t result; int i; int pos[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}; result=0; for(i=0;i<64;i++){ result |= (uint64_t)(((b<<(pos[i]-1))>>63)<<(63-i)); } return result; } void print_bin_uint64(uint64_t b) { int i; for(i=0;i<64;i++){ printf("%d",(int)((b<<i)>>63)); } printf("\n"); } int main(void) { uint64_t result,b; b = 0x1234567812345678; /* un bloc de 64bits */ result = permutation_initiale(b); /* permutation initiale des bits */ print_bin_uint64(b);/* affichage binaire */ print_bin_uint64(result); return 0; }
Dans ce code vous pouvez voir une façon de repositionner les bits sur un bloc de 64bits contenu dans un type uint64_t (un unsigned int faisant obligatoirement 64bits de long) en utilisant la matrice donnant les positions des bits, la variable result est le PI de b en la coupant en deux uint32_t vous obtiendrez le "Scindement en blocs de 32 bits" ...