mirror of
https://github.com/LucasVbr/data-encryption-standard.git
synced 2026-05-14 01:22:07 +00:00
@@ -44,12 +44,16 @@ public class Des {
|
|||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private static final int[][] S = {
|
/* private static final int[][] S = {
|
||||||
{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7},
|
{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7},
|
||||||
{0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8},
|
{0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8},
|
||||||
{4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0},
|
{4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0},
|
||||||
{15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}
|
{15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
private ArrayList<int[][]> table_S;
|
||||||
|
|
||||||
private static final int[] E = {
|
private static final int[] E = {
|
||||||
32, 1, 2, 3, 4, 5,
|
32, 1, 2, 3, 4, 5,
|
||||||
4, 5, 6, 7, 8, 9,
|
4, 5, 6, 7, 8, 9,
|
||||||
@@ -69,6 +73,7 @@ public class Des {
|
|||||||
this.masterKey[i] = random.nextInt(2);
|
this.masterKey[i] = random.nextInt(2);
|
||||||
}
|
}
|
||||||
this.table_cles = new ArrayList<>();
|
this.table_cles = new ArrayList<>();
|
||||||
|
this.table_S = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,6 +88,7 @@ public class Des {
|
|||||||
|
|
||||||
this.masterKey = masterKey;
|
this.masterKey = masterKey;
|
||||||
this.table_cles = new ArrayList<>();
|
this.table_cles = new ArrayList<>();
|
||||||
|
this.table_S = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Manipulations de bits et String */
|
/* Manipulations de bits et String */
|
||||||
@@ -233,9 +239,7 @@ public class Des {
|
|||||||
public static void invPermutation(int[] tab_permutation, int[] bloc) {
|
public static void invPermutation(int[] tab_permutation, int[] bloc) {
|
||||||
int[] newTab = new int[bloc.length];
|
int[] newTab = new int[bloc.length];
|
||||||
|
|
||||||
//// System.out.println(bloc.length);
|
|
||||||
for (int i = 0; i < bloc.length; i++) {
|
for (int i = 0; i < bloc.length; i++) {
|
||||||
//// System.out.println(tab_permutation[i] % tab_permutation.length);
|
|
||||||
|
|
||||||
newTab[tab_permutation[i] % tab_permutation.length] = bloc[i];
|
newTab[tab_permutation[i] % tab_permutation.length] = bloc[i];
|
||||||
}
|
}
|
||||||
@@ -261,7 +265,7 @@ public class Des {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Fonctions */
|
/* Fonctions */
|
||||||
public static int[] fonction_S(int[] tab) {
|
public int[] fonction_S(int[] tab, int index_S) {
|
||||||
|
|
||||||
String l = "" + tab[0] + tab[5];
|
String l = "" + tab[0] + tab[5];
|
||||||
int ligne = Integer.parseInt(l, 2);
|
int ligne = Integer.parseInt(l, 2);
|
||||||
@@ -269,7 +273,7 @@ public class Des {
|
|||||||
int colonne = Integer.parseInt(c, 2);
|
int colonne = Integer.parseInt(c, 2);
|
||||||
|
|
||||||
// chaque blocs de 6 bits on fait le truc avec bit 1 et bit 6 et l'autre truc pour avoir ligne et colonne de S
|
// chaque blocs de 6 bits on fait le truc avec bit 1 et bit 6 et l'autre truc pour avoir ligne et colonne de S
|
||||||
String coordonneeStr = Integer.toString(S[ligne][colonne], 2);
|
String coordonneeStr = Integer.toString(this.table_S.get(index_S)[ligne][colonne], 2);
|
||||||
int coordonneeInt = Integer.parseInt(coordonneeStr);
|
int coordonneeInt = Integer.parseInt(coordonneeStr);
|
||||||
|
|
||||||
int[] resultat = new int[4];
|
int[] resultat = new int[4];
|
||||||
@@ -327,6 +331,21 @@ public class Des {
|
|||||||
this.table_cles.add(lastCle);
|
this.table_cles.add(lastCle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void genereS(int n) {
|
||||||
|
|
||||||
|
int[][] newS = new int[4][16];
|
||||||
|
Random random = new Random();
|
||||||
|
for (int i = 0; i< 4 ; i++){
|
||||||
|
ArrayList<Integer> liste_valeurs = new ArrayList<>(Arrays.asList(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15));
|
||||||
|
for (int y = 0; y<16 ; y++){
|
||||||
|
int index = random.nextInt(liste_valeurs.size());
|
||||||
|
newS[i][y] = liste_valeurs.get(index);
|
||||||
|
liste_valeurs.remove(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.table_S.add(n,newS);
|
||||||
|
}
|
||||||
|
|
||||||
public int[] fonction_F(int indice_cle, int[] Dn) {
|
public int[] fonction_F(int indice_cle, int[] Dn) {
|
||||||
//xor entre this.E et la cle trouvé à cette ronde
|
//xor entre this.E et la cle trouvé à cette ronde
|
||||||
int[] cle = this.table_cles.get(indice_cle);
|
int[] cle = this.table_cles.get(indice_cle);
|
||||||
@@ -341,7 +360,7 @@ public class Des {
|
|||||||
int[][] bloc = new int[8][4];
|
int[][] bloc = new int[8][4];
|
||||||
|
|
||||||
for (int i = 0; i < decoupe.length; i++) {
|
for (int i = 0; i < decoupe.length; i++) {
|
||||||
int[] tab = fonction_S(decoupe[i]);
|
int[] tab = fonction_S(decoupe[i], i);
|
||||||
System.arraycopy(tab, 0, bloc[i], 0, tab.length);
|
System.arraycopy(tab, 0, bloc[i], 0, tab.length);
|
||||||
}
|
}
|
||||||
return recollageBloc(bloc);
|
return recollageBloc(bloc);
|
||||||
@@ -370,6 +389,7 @@ public class Des {
|
|||||||
//Boucle de génération 16 des clés
|
//Boucle de génération 16 des clés
|
||||||
for (int n = 0; n < (TAILLE_BLOC / 4); n++) {
|
for (int n = 0; n < (TAILLE_BLOC / 4); n++) {
|
||||||
this.genereCle(n);
|
this.genereCle(n);
|
||||||
|
this.genereS(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < decoupe.length; i++) {
|
for (int i = 0; i < decoupe.length; i++) {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ public class testDes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void testFonctionS() {
|
public static void testFonctionS() {
|
||||||
System.out.println(Arrays.toString(Des.fonction_S(new int[]{1, 1, 1, 1, 1, 1})));
|
// System.out.println(Arrays.toString(Des.fonction_S(new int[]{1, 1, 1, 1, 1, 1})));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void testFonctionF() {
|
public static void testFonctionF() {
|
||||||
|
|||||||
Reference in New Issue
Block a user