JAVA 7.

package com.javarush.test.level18.lesson10.bonus01;

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

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

import java.io.*;
import java.util.*;

public class Solution {
    public static void main(String[] args) throws IOException
    {
        FileInputStream inputStream = new FileInputStream(args[1]);
        ArrayList<Integer> bytes = new ArrayList<>();
        while (inputStream.available() > 0) {
            bytes.add(inputStream.read());
        }
        ArrayList<Integer> output = new ArrayList<>();
        if (args[0].equals("-e")) output = encrypt(bytes);
        else if (args[0].equals("-d")) output = decrypt(bytes);
        FileOutputStream outputStream = new FileOutputStream(args[2]);
        for (Integer integer : output) {
            outputStream.write(integer);
        }
        inputStream.close();
        outputStream.close();
    }

    private static ArrayList<Integer> encrypt(ArrayList<Integer> bytes) {
        ArrayList<Integer> list = new ArrayList<>();
        for (Integer aByte : bytes) {
            list.add(aByte + 3);
        }
        return list;
    }

    private static ArrayList<Integer> decrypt(ArrayList<Integer> bytes) {
        ArrayList<Integer> list = new ArrayList<>();
        for (Integer aByte : bytes) {
            list.add(aByte - 3);
        }
        return list;
    }
}

JAVA 8 С ЛЯМБДАМИ.

package com.javarush.test.level18.lesson10.bonus01;

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

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

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;

public class Solution {
    public static void main(String[] args) throws IOException {
        FileInputStream inputStream = new FileInputStream(args[1]);
        ArrayList<Integer> bytes = new ArrayList<>();
        while (inputStream.available() > 0) {
            bytes.add(inputStream.read());
        }
        ArrayList<Integer> output = new ArrayList<>();
        if (args[0].equals("-e")) output = encrypt(bytes);
        else if (args[0].equals("-d")) output = decrypt(bytes);
        FileOutputStream outputStream = new FileOutputStream(args[2]);
        for (Integer integer : output) {
            outputStream.write(integer);
        }
        inputStream.close();
        outputStream.close();
    }
    private static ArrayList<Integer> encrypt(ArrayList<Integer> bytes) {
        return bytes.stream().map(aByte -> aByte + 3).collect(Collectors.toCollection(ArrayList::new));
    }
    private static ArrayList<Integer> decrypt(ArrayList<Integer> bytes) {
        return bytes.stream().map(aByte -> aByte - 3).collect(Collectors.toCollection(ArrayList::new));
    }
}

 

НЕВЕРНОЕ РЕШЕНИЕ ЧЕРЕЗ ШИФРОВКУ СИМВОЛОВ. В ЭТОМ РЕШЕНИИ НЕ УДАЁТСЯ ПЕРЕДАТЬ ОТСТУПЫ.

package com.javarush.test.level18.lesson10.bonus01;

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

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

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class Solution {
    public static void main(String[] args) throws IOException
    {
        List<String> lines = Files.readAllLines(Paths.get(args[1]), StandardCharsets.UTF_8);
        StringBuilder builder = new StringBuilder();
        //lines.forEach(builder::append);    //java 8
        for (String line : lines) {
            builder.append(line);
        }
        char[] chars = builder.toString().toCharArray();
        //debug
        for (char aChar : chars) {
            System.out.print(aChar);
        }
        System.out.println();
        System.out.println("========== Encrypted: ");
        //
        HashMap key = GetKey.reseiveKey();
        if (args[0].equals("-e")) encrypt(chars, key);
        else if (args[0].equals("-d")) decrypt(chars, key);
        StringBuilder stringBuilder = new StringBuilder();
        for (char aChar : chars) {
            String a = Character.toString(aChar);
            stringBuilder.append(a);
        }
        String output = stringBuilder.toString();
        //debug
        System.out.println(output);
        //
        writeUsingFileWriter(output, args[2]);
    }

    private static void writeUsingFileWriter(String data, String outputPath) {
        OutputStream os = null;
        try {
            os = new FileOutputStream(new File(outputPath));
            os.write(data.getBytes(), 0, data.length());
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void decrypt(char[] chars, HashMap map) {
        for (int i = 0; i < chars.length; i++) {
            Iterator<Map.Entry<Character, Character>> iterator = map.entrySet().iterator();
            while (iterator.hasNext())
            {
                Map.Entry<Character, Character> pair = iterator.next();
                char key = pair.getKey();
                char value = pair.getValue();
                if (chars[i] == value) {
                    chars[i] = key;
                    break;
                }
            }
        }
    }

    private static void encrypt(char[] chars, HashMap map) {
        for (int i = 0; i < chars.length; i++) {
            Iterator<Map.Entry<Character, Character>> iterator = map.entrySet().iterator();
            while (iterator.hasNext())
            {
                Map.Entry<Character, Character> pair = iterator.next();
                char key = pair.getKey();
                char value = pair.getValue();
                if (chars[i] == key) { chars[i] = value;
                break; }
            }
        }
    }
}

 

package com.javarush.test.level18.lesson10.bonus01;

import java.util.HashMap;

/**
 * Created by promoscow on 22.10.16.
 */
public class GetKey {
    public static HashMap<Character, Character> reseiveKey() {
        HashMap<Character, Character> map = new HashMap<>();
        map.put('a', 'q');
        map.put('b', 'w');
        map.put('c', 'e');
        map.put('d', 'r');
        map.put('e', 't');
        map.put('f', 'y');
        map.put('g', 'u');
        map.put('h', 'i');
        map.put('i', 'o');
        map.put('j', 'p');
        map.put('k', 'z');
        map.put('l', 'x');
        map.put('m', 'c');
        map.put('n', 'v');
        map.put('o', 'b');
        map.put('p', 'n');
        map.put('q', 'm');
        map.put('r', 'a');
        map.put('s', 's');
        map.put('t', 'd');
        map.put('u', 'f');
        map.put('v', 'g');
        map.put('w', 'h');
        map.put('x', 'j');
        map.put('y', 'k');
        map.put('z', 'l');
        map.put('A', 'Q');
        map.put('B', 'W');
        map.put('C', 'E');
        map.put('D', 'R');
        map.put('E', 'T');
        map.put('F', 'Y');
        map.put('G', 'U');
        map.put('H', 'I');
        map.put('I', 'O');
        map.put('J', 'P');
        map.put('K', 'Z');
        map.put('L', 'X');
        map.put('M', 'C');
        map.put('N', 'V');
        map.put('O', 'B');
        map.put('P', 'N');
        map.put('Q', 'M');
        map.put('R', 'A');
        map.put('S', 'S');
        map.put('T', 'D');
        map.put('U', 'F');
        map.put('V', 'G');
        map.put('W', 'H');
        map.put('X', 'J');
        map.put('Y', 'K');
        map.put('Z', 'L');

        return map;
    }
}