Шифровка Придумать механизм шифровки/дешифровки

Программа запускается с одним из следующих наборов параметров: -e fileName fileOutputName -d fileName fileOutputName где fileName - имя файла, который необходимо зашифровать/расшифровать fileOutputName - имя файла, куда необходимо записать результат шифрования/дешифрования -e - ключ указывает, что необходимо зашифровать данные -d - ключ указывает, что необходимо расшифровать данные

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

public class SolutionCaesar {
    private static final int engLCStart = 97, engLCEnd = 122, engUCStart = 65, engUCEnd = 90, rusLCStart = 224, rusLCEnd = 255,
        rusUCStart = 192, rusUCEnd = 223, engLength = engLCEnd - engLCStart + 1, rusLength = rusLCEnd - rusLCStart + 1, key = 18;
    private static ArrayList<Integer> list = new ArrayList<>();
    private static byte[] buff;

    public static void main(String[] args) throws IOException {
        if (args[0].equals("-e")) {
            readFromFile(args[1]);
            writeToFile(args[2], cryptIt());
        } else if (args[0].equals("-d")) {
            readFromFile(args[1]);
            writeToFile(args[2], unCryptIt());
        }
    }

    private static byte[] cryptIt() {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) >= engLCStart && list.get(i) <= engLCEnd) {
                list.set(i, (list.get(i) - engLCStart + key) % engLength + engLCStart);
            }
            else if (list.get(i) >= engUCStart && list.get(i) <= engUCEnd) {
                list.set(i, (list.get(i) - engUCStart + key) % engLength + engUCStart);
            }
            else if (list.get(i) >= rusLCStart && list.get(i) <= rusLCEnd) {
                list.set(i, (list.get(i) - rusLCStart + key) % rusLength + rusLCStart);
            }
            else if (list.get(i) >= rusUCStart && list.get(i) <= rusUCEnd) {
                list.set(i, (list.get(i) - rusUCStart + key) % rusLength + rusUCStart);
            }
        }
        buff = new byte[list.size()];
        for (int i = 0; i < list.size(); i++) {
            buff[i] = (byte)(int)list.get(i);
        }
        return buff;
    }

    private static byte[] unCryptIt() {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) >= engLCStart && list.get(i) <= engLCEnd) {
                int value = (list.get(i) - engLCStart - key) % engLength;
                if (value >= 0) {
                    list.set(i, value + engLCStart);
                }
                else {
                    value = (list.get(i) - engLCStart - key + engLength) % engLength;
                    list.set(i, value + engLCStart);
                }
            }
            else if (list.get(i) >= engUCStart && list.get(i) <= engUCEnd) {
                int value = (list.get(i) - engUCStart - key) % engLength;
                if (value >= 0) {
                    list.set(i, value + engUCStart);
                }
                else {
                    value = (list.get(i) - engUCStart - key + engLength) % engLength;
                    list.set(i, value + engUCStart);
                }
            }
            else if (list.get(i) >= rusLCStart && list.get(i) <= rusLCEnd) {
                int value = (list.get(i) - rusLCStart - key) % rusLength;
                if (value >= 0) {
                    list.set(i, value + rusLCStart);
                }
                else {
                    value = (list.get(i) - rusLCStart - key + rusLength) % rusLength;
                    list.set(i, value + rusLCStart);
                }
            }
            else if (list.get(i) >= rusUCStart && list.get(i) <= rusUCEnd) {
                int value =(list.get(i) - rusUCStart - key) % rusLength;
                if (value >= 0) {
                    list.set(i, value + rusUCStart);
                }
                else {
                    value =(list.get(i) - rusUCStart - key + rusLength) % rusLength;
                    list.set(i, value + rusUCStart);
                }
            }
        }
        buff = new byte[list.size()];
        for (int i = 0; i < list.size(); i++) {
            buff[i] = (byte)(int)list.get(i);
        }
        return buff;
    }

    private static void readFromFile(String fileName) throws IOException {
        FileInputStream in = new FileInputStream(fileName);
        while (in.available() > 0) {
            list.add(in.read());
        }
        in.close();
    }

    private static void writeToFile(String fileName, byte[] buff) throws IOException {
        FileOutputStream out = new FileOutputStream(fileName);
        out.write(buff);
        out.close();
    }
}

Вроде алгоритм Цезаря для 4х типов букв. Вроде работает ) Но валидатор не принял. Переделал в более простой шифр - отнял число при шифровке и прибавил при дешифровке, приняло сразу.

Подскажите, пожалуйста, не приняло потому что файл, не содержащий буквы, а только символы разные, шифр оставит как есть? Или в коде есть косяки?

задан 02 Ноя '16, 19:41

RelaxeR's gravatar image

RelaxeR
5796
одобрено: 45%

закрыто 13 Сен, 15:56

AndyRad's gravatar image

AndyRad
13.1k29

Вопрос был закрыт по следующей причине: "Problem is not reproducible or outdated" AndyRad 13 Сен, 15:56


Согласно условия шифровать надо все байты. Насчет косяков не подскажу - тестируйте.

ссылка

опубликован 03 Ноя '16, 05:57

Yuri_Dnepr's gravatar image

Yuri_Dnepr
5.8k7
одобрено: 51%

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×3,808
×2

Задан: 02 Ноя '16, 19:41

Просмотров: 199 раз

Отредактирован: 13 Сен, 15:56