Algorithme Data Encryption Standard (DES)
simozemaim
-
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train de comprendre cette algorithme mais je suis bloquée sur partie : permutation initiale .voila le lien qui explique cette algorithme
http://www.commentcamarche.net/contents/204-introduction-au-chiffrement-avec-des
plus précisément comment parcourant la matrice de gauche à droite puis de haut en bas ?
Merci d'avance
je suis en train de comprendre cette algorithme mais je suis bloquée sur partie : permutation initiale .voila le lien qui explique cette algorithme
http://www.commentcamarche.net/contents/204-introduction-au-chiffrement-avec-des
plus précisément comment parcourant la matrice de gauche à droite puis de haut en bas ?
Merci d'avance
A voir également:
- Algorithme Data Encryption Standard (DES)
- App data - Guide
- Pilote son standard - Télécharger - Pilotes & Matériel
- Windows data recovery - Télécharger - Récupération de données
- Get data back - Télécharger - Récupération de données
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
1 réponse
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" ...