|
|
Travail sur la notion de bit et de clé en cryptographie | Bit
Cle TestCle |
|
|
Monomes et polynomes |
Monome
Polynome TestPolynome |
| class Bit { protected boolean bit; public Bit(boolean bit) { // ... } public Bit(char c) { // ... } public String toString() { // ... } public Bit not() public Bit xor(Bit b) public Bit copie() } |
| class Cle { protected Bit[] cle; public Cle(String cle) // par exemple "0011010" { // ... } public Cle(int length) // Créé une clé de longueur 'length' initialisée à "0000...0000" { // ... } public String toString() public int length() // Retourne la longueur de la clé public Cle not() // Retourne le complément de la clé courante public Cle xor(Cle cle) // Calcul le "ou exclusif" de la clé courante avec la clé passé en paramètre public Cle copie() // Effectue une copie de la clé courante } |
|
0
|
1
|
2
|
3
|
|
3
|
2
|
1
|
0
|
Voici le code de la classe TestCle, à vous de
faire celui de la classe Cle :
| class TestCle { public static void main(String[] args) { Cle cle1 = new Cle("10011"); Cle cle2 = new Cle("11111"); System.out.println("Cle1 = "+cle1+" et Cle2 = "+cle2); System.out.println("Complement de la Cle1 = "+cle1.not()); System.out.println("Complement du complement de la Cle1 = "+cle1.not().not()); System.out.println("Cle1 xor Cle2 = "+cle1.xor(cle2)); System.out.println("(Cle1 xor Cle2) xor Cle2 = "+cle1.xor(cle2).xor(cle2)); System.out.println("Permutation de Cle1 = "+cle1.permutation(new int[]{4,3,2,1,0})); } } |
| C:\Java\Algo>
java TestCle Cle1 = 10011 et Cle2 = 11111 Complement de la Cle1 = 01100 Complement du complement de la Cle1 = 10011 Cle1 xor Cle2 = 01100 (Cle1 xor Cle2) xor Cle2 = 10011 Permutation de Cle1 = 11001 C:\Java\Algo> |
| class Monome { /** Le coefficient de ce monome */ protected int coef; /** L'exposant de ce monome */ protected int exp; public Monome(int coef, int exp) { // ... } public String toString() { // ... } public int getCoef() { // ... } public int getExp() { // ... } } |
| class Polynome { /** Un polynome est un ensemble de monomes */ protected Monome[] monomes; public Polynome() { // ... } public Polynome(int a) { // ... } public Polynome(int a, int b) { // ... } public Polynome(int a, int b, int c) { // ... } public Polynome(int[] coeffs) { // ... } public int coefAt(...) { // ... } public String toString() { // Dans le cas ou le polynome ne contient que des monomes nuls afficher 0 (zéro) } } |
| C:\Java\Algo>
java TestPolynome P0 = X+1, soit P0(2) = 3 et sa derivee 1 P1 = 3X^2-X+1, soit P1(2) = 11 et sa derivee 6X-1 P2 = 5X^4+4X^3+3X^2+2X+1, soit P2(2) = 129 et sa derivee 20X^3+12X^2+6X+2 PN = -6X^5-5X^4-4X^3-3X^2-2X-1, soit PN(2) = -321 et sa derivee -30X^4-20X^3-12X^2-6X-2 Somme de P1 et PN = -6X^5-5X^4-4X^3-3X Produit de P0 par lui meme = X^2+2X+1 C:\Java\Algo> |
Voici le code de la classe TestPolynome, à
vous de faire celui de la classe Monome et
Polynome :
| class TestPolynome { public static void main(String[] args) { Polynome p0 = new Polynome(1,1); // 1 + X Polynome p1 = new Polynome(1,-1,3); // 1 - X + 3X^2 Polynome p2 = new Polynome(1,2,3,4,5); // 1 + 2X + 3X^2 + 4X^3 + 5X^4 Polynome pn = new Polynome(new int[]{-1,-2,-3,-4,-5,-6}); System.out.println("P0 = "+p0+", soit P0(2) = "+p0.calcul(2)+" et sa derivee "+p0.derivee()); System.out.println("P1 = "+p1+", soit P1(2) = "+p1.calcul(2)+" et sa derivee "+p1.derivee()); System.out.println("P2 = "+p2+", soit P2(2) = "+p2.calcul(2)+" et sa derivee "+p2.derivee()); System.out.println("PN = "+pn+", soit PN(2) = "+pn.calcul(2)+" et sa derivee "+pn.derivee()); System.out.println(); System.out.println("Somme de P1 et PN = "+p1.somme(pn)); System.out.println("Produit de P0 par lui meme = "+ p0.produit(p0)); } } |