Шифровка

  • 10
  • Недоступна
Придумать механизм шифровки/дешифровки. Программа запускается с одним из следующих наборов параметров: -e fileName fileOutputName -d fileName fileOutputName где: fileName - имя файла, который необходимо зашифровать/расшифровать. fileOutputName - имя файла, куда необходимо записать результат шифрова
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (117)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Дмитрий23 уровень, Москва
1 июля, 16:08
ВАЖНО!! Валидатор ругается на:
File file = new File(args[1]);
File fileOutput = new File(args[2]);
FileInputStream reader = new FileInputStream(file);
FileOutputStream writer = new FileOutputStream(fileOutput);
Но принимает лаконичное:
FileInputStream reader = new FileInputStream(args[1]);
FileOutputStream writer = new FileOutputStream(args[2]);
Смысла нет. Просто оно так.
Dmitry Potamoshnev30 уровень, Москва
25 июня, 18:09
Если игнорировать args[0], валидатор пропускает шифрование и дешифровку способом:
return 255 - curByte;
Павел19 уровень, Санкт-Петербург
24 июня, 19:31
как понять зашифровтаь и расшифровтаь???
Роман Носулько19 уровень, Казань
5 мая, 16:56
Если кто-то как и я не понял, что в строке Program arguments переменные для проверки, должны быть заданы ТАК: "-e" "fileName" "fileOutputName". Тогда можно использовать args[0], args[1], args[2]. Я же использовал такую запись: Program arguments : "-e fileName fileOutputName". В коде использовал: String[] data = args[0].split(" "); Такое решение валидатор не принимает, ругаясь на все кроме первого пункта требований.
Мишаня20 уровень
20 мая, 06:48
все что передано аргументами вроде уже разделено сплитом в массив строк, какой смысл искать внутри массива args[0] пробелы там или -e или -d
Dmitriy19 уровень
24 апреля, 12:32
Поразрядная операция исключающая ИЛИ позволяет делать задачу практически в три строки, не считая открытия закрытия потоков:
int key = 88;
int data = fis.read() ^ key;
fos.write(data);
Все, такая конструкция будет работать как в сторону шифрования так и дешифрования.
katfald20 уровень, Киев
30 апреля, 13:40
Что значит "^"?
Dmitriy19 уровень
2 мая, 22:31
поразрядная операция исключающего ИЛИ. лень много писать, поэтому проще загуглить если интересно)
MrKermit20 уровень, Москва
22 апреля, 08:15
+1 байт -1 байт
vapima20 уровень, Москва
26 апреля, 13:48
тож так сделал)) теперь храню все пин коды так
Мишаня20 уровень
20 мая, 07:06
новый байт = int+1 или записать лишний байт между каждым байтом)
Антон26 уровень, Москва
25 марта, 12:05
сделал побитовый сдвиг, туда обратно
Андрей29 уровень, Гомель
20 марта, 16:17
Поменял местами все соседние байты - тоже прокатило
Евгений Ашкинадзе20 уровень, Минск
15 марта, 18:27
Что-то смотрю тут все отнимали и вычитали, либо записывали наоборот. Я же хотел сделать простой алгоритм, который даже файл в несколько гигабайт быстро "зашифрует". Поэтому просто буфером в 8к проходился и внутри него по своему перемешивал байты между собой. При чём так, что бы повторное перемешивание не приводило к декодированию. Для декодирования годится только перемешивание в обратном порядке.
Alexey Tarakanov35 уровень, Москва
13 марта, 17:54
То чувство, когда задачи посложнее на самом деле даются гораздо легче основного блока и решаются мин за 10 с 1 попытки :) не мудрствовал сильно, шифровка: +1 к byte, дешифровка: -1. а благодаря прошлым урокам сразу отмел мысль что возможна проблема с превышением byte, тк при превышении он просто пойдет по второму кругу (128 -> 1, 129->2), поэтому можно как прибавлять, так и отнимать, логика одинаковая.
Эмиль Кан29 уровень, Москва
16 марта, 14:17
Проверил, по второму кругу не пошло. Для того чтобы пошло, надо применить модуль (input.read() + encryptionStep) % 128
Alexey Tarakanov35 уровень, Москва
16 марта, 19:32
Символ ~ согласно таблице это byte = 126. В коде вы прибавляете 50, то получаете 176 (или byte = -80), по вашей ссылке внизу есть расширение таблицы ascii, должен получиться символ ░, но тк вы используете кодировку windows-1251, то увидете это: ° (тык - внизу по этой ссылке соответствует тому, что вы получите у себя в IntelliJ IDEA). Что касается соединения моего примера с вашей задачей - попробуйте убрать %128 и +50 замените на +257. Это окажется тем же самым, как и +1. Ну или на +256, тогда вообще ничего не изменится.
while(input.available() > 0)
                output.write(input.read()+257);
Эмиль Кан29 уровень, Москва
16 марта, 19:58
Спасибо!