Не проходит решение, хотя задача решается.
Кто-нибудь из гуру, подскажите, пожалуйста, почему даже по первым пунктам не проходит решение?
Если бы подобный ... код увидели в бизнес проекте, у меня бы остались целыми руки?
package com.javarush.task.task18.task1826;
import javax.crypto.*;
import javax.crypto.spec.DESedeKeySpec;
import java.io.*;
/*
Шифровка
Придумать механизм шифровки/дешифровки.
Программа запускается с одним из следующих наборов параметров:
-e fileName fileOutputName
-d fileName fileOutputName
где:
fileName - имя файла, который необходимо зашифровать/расшифровать.
fileOutputName - имя файла, куда необходимо записать результат шифрования/дешифрования.
-e - ключ указывает, что необходимо зашифровать данные.
-d - ключ указывает, что необходимо расшифровать данные.
Требования:
1. Считывать с консоли ничего не нужно.
2. Создай поток для чтения из файла, который приходит вторым параметром ([fileName]).
3. Создай поток для записи в файл, который приходит третьим параметром ([fileOutputName]).
4. В режиме "-e" программа должна зашифровать [fileName] и записать в [fileOutputName].
5. В режиме "-d" программа должна расшифровать [fileName] и записать в [fileOutputName].
6. Созданные для файлов потоки должны быть закрыты.
*/
public class Solution {
public static void main(String[] args) throws IOException {
Encryptor encryptor = new Encryptor();
Decryptor decryptor = new Decryptor();
if (args[0].equals("-e")) {
FileInputStream inputStream = new FileInputStream(args[1]);
byte[] arr = new byte[inputStream.available()];
inputStream.read(arr);
encryptor.toKey(arr, args[2]);
inputStream.close();
}
else if (args[0].equals("-d")) {
decryptor.fromKey(args[1], args[2]);
}
}
public static class Encryptor {
public void toKey(byte[] arr, String keyfile) {
FileOutputStream fos = null;
try {
String algorithm = "DESede";
KeyGenerator kg = KeyGenerator.getInstance(algorithm);
SecretKey key = kg.generateKey();
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, key);
ObjectOutputStream oos = new ObjectOutputStream(
new CipherOutputStream(new FileOutputStream("Secret.file"), cipher));
oos.writeObject(arr);
fos = new FileOutputStream(keyfile);
SecretKeyFactory skf = SecretKeyFactory.getInstance(algorithm);
DESedeKeySpec keyspec = (DESedeKeySpec) skf.getKeySpec(key, DESedeKeySpec.class);
fos.write(keyspec.getKey());
fos.close();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static class Decryptor {
public void fromKey(String keyFile, String toFile)
{
FileInputStream fis = null;
try
{
String algorithm = "DESede";
fis = new FileInputStream(keyFile);
byte[] keyspecbytes = new byte[fis.available()];
fis.read(keyspecbytes);
SecretKeyFactory skf = SecretKeyFactory.getInstance(algorithm);
DESedeKeySpec keyspec = new DESedeKeySpec(keyspecbytes);
SecretKey key = skf.generateSecret(keyspec);
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, key);
ObjectInputStream ois = new ObjectInputStream(
new CipherInputStream(new FileInputStream("Secret.file"), cipher));
byte[] fin = (byte[]) ois.readObject();
FileOutputStream outputStream = new FileOutputStream(toFile);
outputStream.write(fin);
outputStream.close();
fis.close();
ois.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}