| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import java.util.Random;
- import java.util.stream.IntStream;
-
- public class Cipher {
-
- private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
- private static final Random random = new Random();
-
- public String key;
-
- public Cipher() {
- this.key = IntStream.range(0, 100)
- .map(x -> ALPHABET.toCharArray()[random.nextInt(ALPHABET.length())])
- .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
- .toString();
- }
-
- public Cipher(String key) {
- if (!isValidKey(key)) {
- throw new IllegalArgumentException("Invalid key");
- }
-
- this.key = key;
- }
-
- private static boolean isValidKey(String key) {
- return key.matches("^[a-z]+$");
- }
-
- public String getKey() {
- return key;
- }
-
- public String encode(String plainText) {
- StringBuilder ciphertext = new StringBuilder(plainText.length());
-
- for (int index = 0; index < Math.min(plainText.length(), key.length()); index++) {
- ciphertext.append(encodeCharacter(plainText, index));
- }
-
- return ciphertext.toString();
- }
-
- private char encodeCharacter(String plainText, int index) {
- int alphabetIdx = ALPHABET.indexOf(plainText.toCharArray()[index]) + ALPHABET.indexOf(key.toCharArray()[index]);
-
- if (alphabetIdx >= ALPHABET.length()) {
- alphabetIdx -= ALPHABET.length();
- }
-
- return ALPHABET.toCharArray()[alphabetIdx];
- }
-
- public String decode(String cipherText) {
- StringBuilder plainText = new StringBuilder(cipherText.length());
-
- for (int i = 0; i < cipherText.length(); i++) {
- plainText.append(decodeCharacter(cipherText, i));
- }
-
- return plainText.toString();
- }
-
- private char decodeCharacter(String cipherText, int index) {
- int alphabetIdx = ALPHABET.indexOf(cipherText.toCharArray()[index]) - ALPHABET.indexOf(key.toCharArray()[index]);
-
- if (alphabetIdx < 0) {
- alphabetIdx += ALPHABET.length();
- }
-
- return ALPHABET.toCharArray()[alphabetIdx];
- }
- }
|