1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| public class Rotor {
static final char[][] rotor1 =
{
{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'},
{'G', 'T', 'U', 'B', 'Z', 'Y', 'V', 'J', 'L', 'K', 'S', 'A', 'W', 'X', 'H', 'C', 'D', 'E', 'M', 'N', 'O', 'P', 'Q', 'R', 'I', 'F'}
};
static final char[][] rotor2 =
{
{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'},
{'L', 'C', 'D', 'G', 'Y', 'U', 'B', 'Z', 'S', 'V', 'J', 'E', 'M', 'A', 'W', 'X', 'H', 'N', 'O', 'P', 'Q', 'R', 'I', 'F', 'T', 'K'}
};
static final char[][] rotor3 =
{
{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'},
{'S', 'V', 'J', 'E', 'M', 'W', 'X', 'L', 'N', 'A', 'B', 'H', 'C', 'O', 'P', 'Q', 'R', 'I', 'F', 'Y', 'D', 'G', 'T', 'U', 'Z', 'K'}
};
static final char[][] reflector =
{
{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'},
{'Y', 'R', 'U', 'H', 'Q', 'S', 'L', 'D', 'P', 'X', 'N', 'G', 'O', 'K', 'M', 'I', 'E', 'B', 'F', 'Z', 'C', 'W', 'V', 'J', 'A', 'T'}
};
// 'A' encode donne 'G' dans rotor1, 'G' encode donne 'B' dans rotor2, 'B' encode donne 'V' dans rotor3, 'V' encode donne 'W'
public char getLetter(char letter,char[][] coresp,boolean encode) {
char result = letter;
if (coresp !=null && coresp.length == 2) {
char[] scoresp = encode?coresp[0]:coresp[1];
char[] ecoresp = encode?coresp[1]:coresp[0];
if (scoresp.length == ecoresp.length) {
for (int i=0;i<scoresp.length;i++) {
if (letter == scoresp[i]) {
result = ecoresp[i];
break;
}
}
}
}
return result;
}
public char encode(char letter,char[][] coresp) {
return getLetter(letter,coresp,true);
}
public char decode(char letter,char[][] coresp) {
return getLetter(letter,coresp,false);
}
public char encode(char letter) {
return encode(encode(encode(encode(letter,rotor1),rotor2),rotor3),reflector);
}
public char decode(char letter) {
return decode(decode(decode(decode(letter,reflector),rotor3),rotor2),rotor1);
}
public String encodeMessage(String message) {
StringBuffer sb = new StringBuffer();
for (int i=0;i<message.length();i++) {
sb.append(encode(message.charAt(i)));
}
return sb.toString();
}
public String decodeMessage(String message) {
StringBuffer sb = new StringBuffer();
for (int i=0;i<message.length();i++) {
sb.append(decode(message.charAt(i)));
}
return sb.toString();
}
public static void main(String[] args) {
Rotor r = new Rotor();
String message = "HELLO";
String encodedMessage = r.encodeMessage(message);
String decodedMessage = r.decodeMessage(encodedMessage);
System.out.println("Encode de " + message +" = " + encodedMessage);
System.out.println("Decode de " + encodedMessage +" = " + decodedMessage);
}
} |
Partager