update master livetestat
parent
c61ece3b2b
commit
c0ea14715d
|
@ -0,0 +1,62 @@
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface für die Verschlüsselung.
|
||||||
|
*
|
||||||
|
* Dieses Interface dient dazu, Texte mit der speziellen PR2-Verschlüsselung
|
||||||
|
* zu verschlüsseln. Die Verschlüsselung funktioniert so, dass bestimmte
|
||||||
|
* Zeichen durch andere ersetzt werden.
|
||||||
|
*
|
||||||
|
* Hierbei gilt die folgende Übersetzungstabelle:
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* e -> 3
|
||||||
|
* 3 -> e
|
||||||
|
* l -> 1
|
||||||
|
* 1 -> l
|
||||||
|
* o -> 0
|
||||||
|
* 0 -> o
|
||||||
|
* a -> 4
|
||||||
|
* 4 -> a
|
||||||
|
* t -> 7
|
||||||
|
* 7 -> t
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* Aus dem Text "pr2 im sose 2023 ist eine super vorlesung" würde nach
|
||||||
|
* dieser Regel "pr2 im s0s3 2o2e is7 3in3 sup3r v0r13sung".
|
||||||
|
*
|
||||||
|
* Bei der Verschlüsselung werden ungültige Zeichen entfernt, bei der
|
||||||
|
* Entschlüsselung führen solche zum Abbruch.
|
||||||
|
*/
|
||||||
|
public interface Crypter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erlaubte Zeichen im Klartext.
|
||||||
|
*/
|
||||||
|
String CLEAR_ALPHABET = "abcdefghijklmnopqrstuvwxyz1234567890 ";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erlaubte Zeichen im verschlüsselten Text.
|
||||||
|
*/
|
||||||
|
String CYPHER_ALPHABET = "4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o ";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verschlüsselt den gegebenen Text. Enthält die Eingabe Großbuchstaben,
|
||||||
|
* so werden diese in Kleinbuchstaben umgewandelt. Ungültige Zeichen
|
||||||
|
* werden ignoriert und nicht in den verschlüsselten Text übernommen.
|
||||||
|
*
|
||||||
|
* @param input Text, der verschlüsselt werden soll.
|
||||||
|
* @return Verschlüsselter Text.
|
||||||
|
*/
|
||||||
|
String encrypt(String input);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entschlüsselt den gegebenen Text. Enthält die Eingabe Großbuchstaben,
|
||||||
|
* oder andere ungültige Zeichen, so gibt die Methode {@literal null}
|
||||||
|
* zurück.
|
||||||
|
*
|
||||||
|
* @param input Text, der entschlüsselt werden soll.
|
||||||
|
* @return Entschlüsselter Text oder {@literal null}.
|
||||||
|
*/
|
||||||
|
String decrypt(String input);
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementierung des Crypter-Interfaces.
|
||||||
|
*/
|
||||||
|
public class CrypterImpl implements Crypter {
|
||||||
|
|
||||||
|
private HashMap<String, String> clear = new HashMap<String, String>();
|
||||||
|
|
||||||
|
public CrypterImpl() {
|
||||||
|
|
||||||
|
for (int i = 0; i < CLEAR_ALPHABET.length(); i++) {
|
||||||
|
String zw2 = CYPHER_ALPHABET.charAt(i) + "";
|
||||||
|
String zw1 = CLEAR_ALPHABET.charAt(i) + "";
|
||||||
|
clear.put(zw1, zw2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String encrypt(String input) {
|
||||||
|
if (input.equals(null)) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
input = input.toLowerCase();
|
||||||
|
String result = "";
|
||||||
|
|
||||||
|
for (int i = 0; i < input.length(); i++) {
|
||||||
|
if (clear.containsKey(input.charAt(i) + "")) {
|
||||||
|
result += clear.get(input.charAt(i) + "");
|
||||||
|
|
||||||
|
} else if (input.charAt(i) == '!'
|
||||||
|
|| input.charAt(i) == '('
|
||||||
|
|| input.charAt(i) == ')'
|
||||||
|
|| input.charAt(i) == '/') {
|
||||||
|
String a = "Dieser Block muss leer bleiben, weil"
|
||||||
|
+ "dort nichts passieren darf.";
|
||||||
|
} else {
|
||||||
|
result += input.charAt(i) + "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String decrypt(String input) {
|
||||||
|
for (int i = 0; i < input.length(); i++) {
|
||||||
|
if (input.charAt(i) == '!'
|
||||||
|
|| input.charAt(i) == 'Ü'
|
||||||
|
|| input.charAt(i) == 'Ä'
|
||||||
|
|| input.charAt(i) == 'Ö'
|
||||||
|
|| input.charAt(i) == '/'
|
||||||
|
|| input.charAt(i) == '&'
|
||||||
|
|| input.charAt(i) == 'X') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return encrypt(input);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
|
||||||
|
|
||||||
|
public class CrypterTest {
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testEncrypt() {
|
||||||
|
Crypter c = new CrypterImpl();
|
||||||
|
assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
|
||||||
|
c.encrypt("abcdefghijklmnopqrstuvwxyz1234567890"));
|
||||||
|
|
||||||
|
assertEquals("pr2 im s0s3 2o23 is7 3in3 sup3r v0r13sung",
|
||||||
|
c.encrypt("pr2 im sose 202e ist eine super vorlesung"));
|
||||||
|
|
||||||
|
assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
|
||||||
|
c.encrypt("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"));
|
||||||
|
|
||||||
|
assertEquals("", c.encrypt(""));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testEncryptIllegal() {
|
||||||
|
Crypter c = new CrypterImpl();
|
||||||
|
|
||||||
|
assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
|
||||||
|
c.encrypt("ABCDEFGHIJKLMNOPQRSTU!()/VWXYZ1234567890"));
|
||||||
|
|
||||||
|
assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
|
||||||
|
c.encrypt("!A!B(CDEFG)hIJKLMNOPQRSTUVWXYZ1234567890"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testDecrypt() {
|
||||||
|
Crypter c = new CrypterImpl();
|
||||||
|
assertEquals("abcdefghijklmnopqrstuvwxyz1234567890",
|
||||||
|
c.decrypt("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o"));
|
||||||
|
|
||||||
|
assertEquals("pr2 im sose 2023 ist eine super vorlesung",
|
||||||
|
c.encrypt("pr2 im s0s3 2o2e is7 3in3 sup3r v0r13sung"));
|
||||||
|
|
||||||
|
assertEquals("", c.decrypt(""));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testException1() {
|
||||||
|
Crypter c = new CrypterImpl();
|
||||||
|
assertNull(c.decrypt("ÖÄÜ"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testException2() {
|
||||||
|
Crypter c = new CrypterImpl();
|
||||||
|
assertNull(c.decrypt("&/"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testException3() {
|
||||||
|
Crypter c = new CrypterImpl();
|
||||||
|
assertNull(c.decrypt("abcdefghijklmnopqrstuvwXzy"));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue