mirror of
https://github.com/bytedream/cryptoGX.git
synced 2025-05-09 20:25:10 +02:00
Update Main.java
This commit is contained in:
parent
2f47c7c1de
commit
4b5b951b7b
@ -1,7 +1,10 @@
|
|||||||
/**
|
/*
|
||||||
*
|
|
||||||
* @author blueShard
|
* @author blueShard
|
||||||
* @version 1.11.0
|
* @version 1.12.0
|
||||||
|
*
|
||||||
|
* Some <code>@since</code> versions may be not correct, because the <code>@since</code> tag got added in
|
||||||
|
* version 1.12.0 and I don't have all versions (1.0.0 - 1.11.0), so I cannot see when some methods were added
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.blueshard.cryptogx;
|
package org.blueshard.cryptogx;
|
||||||
@ -29,28 +32,30 @@ import java.security.spec.InvalidKeySpecException;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Main class<p/>
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
public class Main extends Application {
|
public class Main extends Application {
|
||||||
|
|
||||||
protected static final int NON_PORTABLE = 414729643;
|
protected static final int NON_PORTABLE = 1;
|
||||||
protected static final int PORTABLE = 245714766;
|
protected static final int PORTABLE = 0;
|
||||||
|
|
||||||
protected static final int TYPE = PORTABLE;
|
protected static final int TYPE = NON_PORTABLE;
|
||||||
|
|
||||||
protected final static String configDefaultName = "";
|
|
||||||
protected final static String configDefaultEncryptHash = "";
|
|
||||||
protected final static String configDefaultTextKey = "";
|
protected final static String configDefaultTextKey = "";
|
||||||
protected final static String configDefaultTextSalt = "";
|
protected final static String configDefaultTextSalt = "";
|
||||||
protected final static String configDefaultTextAlgorithm = "AES";
|
protected final static String configDefaultTextAlgorithm = "AES-128";
|
||||||
protected final static String configDefaultFileEnDecryptKey = "";
|
protected final static String configDefaultFileEnDecryptKey = "";
|
||||||
protected final static String configDefaultFileEnDecryptSalt = "";
|
protected final static String configDefaultFileEnDecryptSalt = "";
|
||||||
protected final static String configDefaultFileEnDecryptAlgorithm = "AES";
|
protected final static String configDefaultFileEnDecryptAlgorithm = "AES-128";
|
||||||
protected final static int configDefaultFileDeleteIterations = 5;
|
protected final static int configDefaultFileDeleteIterations = 5;
|
||||||
protected final static String configDefaultFileOutputPath = "";
|
protected final static String configDefaultFileOutputPath = "";
|
||||||
protected final static boolean configDefaultRemoveFileFromFileBox = false;
|
protected final static boolean configDefaultRemoveFileFromFileBox = false;
|
||||||
protected final static boolean configDefaultLimitNumberOfThreads = true;
|
protected final static boolean configDefaultLimitNumberOfThreads = true;
|
||||||
|
|
||||||
protected static ArrayList<String> textAlgorithms = new ArrayList<>();
|
private final static byte[] buffer = new byte[64];
|
||||||
protected static ArrayList<String> fileEnDecryptAlgorithms = new ArrayList<>();
|
|
||||||
|
|
||||||
private static Stage mainStage;
|
private static Stage mainStage;
|
||||||
private double rootWindowX, rootWindowY;
|
private double rootWindowX, rootWindowY;
|
||||||
@ -62,6 +67,8 @@ public class Main extends Application {
|
|||||||
*
|
*
|
||||||
* @param primaryStage of the GUI
|
* @param primaryStage of the GUI
|
||||||
* @throws IOException if issues with loading 'mainGUI.fxml'
|
* @throws IOException if issues with loading 'mainGUI.fxml'
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws IOException {
|
public void start(Stage primaryStage) throws IOException {
|
||||||
@ -74,7 +81,8 @@ public class Main extends Application {
|
|||||||
primaryStage.setResizable(false);
|
primaryStage.setResizable(false);
|
||||||
primaryStage.setTitle("cryptoGX");
|
primaryStage.setTitle("cryptoGX");
|
||||||
primaryStage.getIcons().add(new Image(getClass().getResource("resources/cryptoGX.png").toExternalForm()));
|
primaryStage.getIcons().add(new Image(getClass().getResource("resources/cryptoGX.png").toExternalForm()));
|
||||||
Scene scene = new Scene(root, 900, 470);
|
Scene scene = new Scene(root);
|
||||||
|
//Scene scene = new Scene(root, 900, 470);
|
||||||
|
|
||||||
scene.setOnMouseDragged(event -> {
|
scene.setOnMouseDragged(event -> {
|
||||||
primaryStage.setX(event.getScreenX() + rootWindowX);
|
primaryStage.setX(event.getScreenX() + rootWindowX);
|
||||||
@ -94,7 +102,7 @@ public class Main extends Application {
|
|||||||
* Can also be used to en- / decrypt text and files or secure delete files without starting GUI</p>
|
* Can also be used to en- / decrypt text and files or secure delete files without starting GUI</p>
|
||||||
*
|
*
|
||||||
* @param args from the command line
|
* @param args from the command line
|
||||||
* @return status
|
* @return
|
||||||
* @throws BadPaddingException
|
* @throws BadPaddingException
|
||||||
* @throws NoSuchAlgorithmException if wrong algorithm is given (command line)
|
* @throws NoSuchAlgorithmException if wrong algorithm is given (command line)
|
||||||
* @throws IllegalBlockSizeException if wrong size for key is given (command line)
|
* @throws IllegalBlockSizeException if wrong size for key is given (command line)
|
||||||
@ -103,11 +111,24 @@ public class Main extends Application {
|
|||||||
* @throws InvalidKeySpecException
|
* @throws InvalidKeySpecException
|
||||||
* @throws IOException if files cannot be en- / decrypted or deleted correctly (command line)
|
* @throws IOException if files cannot be en- / decrypted or deleted correctly (command line)
|
||||||
* @throws InvalidAlgorithmParameterException if wrong algorithm parameters are given (command line)
|
* @throws InvalidAlgorithmParameterException if wrong algorithm parameters are given (command line)
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) throws BadPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IOException, InvalidAlgorithmParameterException {
|
public static void main(String[] args) throws BadPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IOException, InvalidAlgorithmParameterException {
|
||||||
if (Main.TYPE == Main.NON_PORTABLE) {
|
if (Main.TYPE == Main.PORTABLE) {
|
||||||
if (System.getProperty("os.name").toLowerCase().startsWith("windows")) {
|
String system = System.getProperty("os.name").toLowerCase();
|
||||||
|
if (system.startsWith("windows")) {
|
||||||
config = new File("C:\\Users\\" + System.getProperty("user.name") + "\\AppData\\Roaming\\cryptoGX\\cryptoGX.config");
|
config = new File("C:\\Users\\" + System.getProperty("user.name") + "\\AppData\\Roaming\\cryptoGX\\cryptoGX.config");
|
||||||
|
File directory = new File("C:\\Users\\" + System.getProperty("user.name") + "\\AppData\\Roaming\\cryptoGX");
|
||||||
|
if (!directory.isDirectory()) {
|
||||||
|
directory.mkdir();
|
||||||
|
}
|
||||||
|
} else if (system.startsWith("linux")) {
|
||||||
|
config = new File(System.getProperty("user.home") + "/.cryptoGX/cryptoGX.config");
|
||||||
|
File directory = new File(System.getProperty("user.home") + "/.cryptoGX/");
|
||||||
|
if (!directory.isDirectory()) {
|
||||||
|
directory.mkdir();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
config = new File("cryptoGX.config");
|
config = new File("cryptoGX.config");
|
||||||
}
|
}
|
||||||
@ -116,19 +137,6 @@ public class Main extends Application {
|
|||||||
}
|
}
|
||||||
isConfig = config.isFile();
|
isConfig = config.isFile();
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
String version = Runtime.class.getPackage().getImplementationVersion();
|
|
||||||
if (version.startsWith("1.")) {
|
|
||||||
if (Integer.parseInt(version.substring(2, 3)) < 8) {
|
|
||||||
System.out.println("1");
|
|
||||||
JOptionPane.showMessageDialog(null, "Please use java 1.8.0_240 to java 10.*", "ERROR", JOptionPane.ERROR_MESSAGE);
|
|
||||||
} else if (Integer.parseInt(version.substring(6, 9)) < 240) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Please use java 1.8.0_240 to java 10.*", "ERROR", JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
} else if (Integer.parseInt(version.substring(0, 2)) > 10) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Please use java 1.8.0_240 to java 10.*", "ERROR", JOptionPane.ERROR_MESSAGE);
|
|
||||||
} else {
|
|
||||||
JOptionPane.showMessageDialog(null, "Please use java 1.8.0_240 to java 10.*", "ERROR", JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
launch(args);
|
launch(args);
|
||||||
} else {
|
} else {
|
||||||
args[0] = args[0].replace("-", "");
|
args[0] = args[0].replace("-", "");
|
||||||
@ -140,7 +148,7 @@ public class Main extends Application {
|
|||||||
" File en- / decryption\n" +
|
" File en- / decryption\n" +
|
||||||
" encrypt: <cryptoGX jar file> AES <key> <salt> encrypt <path of file to encrypt> <encrypted file dest>\n" +
|
" encrypt: <cryptoGX jar file> AES <key> <salt> encrypt <path of file to encrypt> <encrypted file dest>\n" +
|
||||||
" decrypt: <cryptoGX jar file> AES <key> <salt> decrypt <encrypted file path> <decrypted file dest>\n\n" +
|
" decrypt: <cryptoGX jar file> AES <key> <salt> decrypt <encrypted file path> <decrypted file dest>\n\n" +
|
||||||
"File secure delete: <iterations> <path of file to delete>");
|
"File secure delete: <cryptoGX jar file> delete <iterations> <path of file to delete>"); //for <iterations> the argument 'default' can be used, which is 5
|
||||||
} else if (args[0].toLowerCase().equals("delete")) {
|
} else if (args[0].toLowerCase().equals("delete")) {
|
||||||
if (args.length > 3) {
|
if (args.length > 3) {
|
||||||
System.err.println("To many arguments were given, expected 3");
|
System.err.println("To many arguments were given, expected 3");
|
||||||
@ -148,14 +156,28 @@ public class Main extends Application {
|
|||||||
System.err.println("To few arguments were given, expected 3");
|
System.err.println("To few arguments were given, expected 3");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
SecureDelete.deleteFileLineByLine(args[2], Integer.parseInt(args[1]));
|
if (args[1].equals("default")) {
|
||||||
|
args[1] = "5";
|
||||||
|
}
|
||||||
|
File deleteFile = new File(args[2]);
|
||||||
|
if (deleteFile.isFile()) {
|
||||||
|
SecureDelete.deleteFile(deleteFile, Integer.parseInt(args[1]), buffer);
|
||||||
|
} else if (deleteFile.isDirectory()) {
|
||||||
|
SecureDelete.deleteDirectory(args[2], Integer.parseInt(args[1]), buffer);
|
||||||
|
} else {
|
||||||
|
System.err.println("Couldn't find file " + args[4]);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
System.err.println(args[1] + " must be a number\n Error: " + e.getMessage());
|
System.err.println(args[1] + " must be a number\n Error: " + e.getMessage());
|
||||||
}
|
}
|
||||||
} else if (args[0].toLowerCase().equals("aes")) {
|
} else if (args[0].toLowerCase().equals("aes")) {
|
||||||
if (args.length < 4) {
|
if (args.length < 5) {
|
||||||
System.err.println("To few arguments were given");
|
System.err.println("To few arguments were given");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
|
} else if (args.length > 6) {
|
||||||
|
System.err.println("To many arguments were given");
|
||||||
|
System.exit(1);
|
||||||
}
|
}
|
||||||
EnDecrypt.AES aes;
|
EnDecrypt.AES aes;
|
||||||
if (args[2].isEmpty()) {
|
if (args[2].isEmpty()) {
|
||||||
@ -164,18 +186,44 @@ public class Main extends Application {
|
|||||||
aes = new EnDecrypt.AES(args[1], args[2].getBytes(StandardCharsets.UTF_8));
|
aes = new EnDecrypt.AES(args[1], args[2].getBytes(StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
String type = args[3].toLowerCase();
|
String type = args[3].toLowerCase();
|
||||||
if (type.equals("encrypt")) {
|
if (args.length == 5) {
|
||||||
System.out.println(aes.encrypt(args[4]));
|
if (type.equals("encrypt")) {
|
||||||
} else if (type.equals("decrypt")) {
|
System.out.println(Base64.getEncoder().encodeToString(aes.encrypt(args[4].getBytes(StandardCharsets.UTF_8))));
|
||||||
System.out.println(aes.decrypt(args[4]));
|
} else if (type.equals("decrypt")) {
|
||||||
} else if (type.equals("fileencrypt") || type.equals("encryptfile")) {
|
System.out.println(aes.decrypt(args[4]));
|
||||||
aes.encryptFileLineByLine(args[4], args[5]);
|
} else {
|
||||||
} else if (type.equals("filedecrypt") ||type.equals("decryptfile")) {
|
System.err.println("Couldn't resolve argument " + args[3] + ", expected 'encrypt' or 'decrypt'");
|
||||||
aes.decryptFileLineByLine(args[4], args[5]);
|
System.exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (type.equals("encrypt")) {
|
||||||
|
File inputFile = new File(args[4]);
|
||||||
|
if (inputFile.isFile()) {
|
||||||
|
aes.encryptFile(new FileInputStream(inputFile), new FileOutputStream(args[5]), new byte[64]);
|
||||||
|
} else if (inputFile.isDirectory()) {
|
||||||
|
aes.encryptDirectory(args[4], args[5], ".cryptoGX", new byte[64]);
|
||||||
|
} else {
|
||||||
|
System.err.println("Couldn't find file " + args[4]);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
} else if (type.equals("decrypt")) {
|
||||||
|
File inputFile = new File(args[4]);
|
||||||
|
if (inputFile.isFile()) {
|
||||||
|
aes.decryptFile(new FileInputStream(inputFile), new FileOutputStream(args[5]), new byte[64]);
|
||||||
|
} else if (inputFile.isDirectory()) {
|
||||||
|
aes.decryptDirectory(args[4], args[5], "@.cryptoGX@", new byte[64]);
|
||||||
|
} else {
|
||||||
|
System.err.println("Couldn't find file " + args[4]);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.err.println("Couldn't resolve argument " + args[3] + ", expected 'encrypt' or 'decrypt'");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
System.exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -183,6 +231,8 @@ public class Main extends Application {
|
|||||||
*
|
*
|
||||||
* @param thread which called this method
|
* @param thread which called this method
|
||||||
* @param throwable of the thread which called the method
|
* @param throwable of the thread which called the method
|
||||||
|
*
|
||||||
|
* @since 1.3.0
|
||||||
*/
|
*/
|
||||||
private static void exceptionAlert(Thread thread, Throwable throwable) {
|
private static void exceptionAlert(Thread thread, Throwable throwable) {
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
@ -193,7 +243,9 @@ public class Main extends Application {
|
|||||||
Alert enDecryptError = new Alert(Alert.AlertType.ERROR, "Error: " + throwable, ButtonType.OK);
|
Alert enDecryptError = new Alert(Alert.AlertType.ERROR, "Error: " + throwable, ButtonType.OK);
|
||||||
enDecryptError.initStyle(StageStyle.UNDECORATED);
|
enDecryptError.initStyle(StageStyle.UNDECORATED);
|
||||||
enDecryptError.setTitle("Error");
|
enDecryptError.setTitle("Error");
|
||||||
|
enDecryptError.setResizable(true);
|
||||||
((Stage) enDecryptError.getDialogPane().getScene().getWindow()).getIcons().add(new Image(Main.class.getResource("resources/cryptoGX.png").toExternalForm()));
|
((Stage) enDecryptError.getDialogPane().getScene().getWindow()).getIcons().add(new Image(Main.class.getResource("resources/cryptoGX.png").toExternalForm()));
|
||||||
|
enDecryptError.getDialogPane().setContent(new Label("Error: " + throwable));
|
||||||
|
|
||||||
Scene window = enDecryptError.getDialogPane().getScene();
|
Scene window = enDecryptError.getDialogPane().getScene();
|
||||||
|
|
||||||
@ -223,7 +275,9 @@ public class Main extends Application {
|
|||||||
"\nError: " + error, ButtonType.OK);
|
"\nError: " + error, ButtonType.OK);
|
||||||
enDecryptError.initStyle(StageStyle.UNDECORATED);
|
enDecryptError.initStyle(StageStyle.UNDECORATED);
|
||||||
enDecryptError.setTitle("Error");
|
enDecryptError.setTitle("Error");
|
||||||
|
enDecryptError.setResizable(true);
|
||||||
((Stage) enDecryptError.getDialogPane().getScene().getWindow()).getIcons().add(new Image(Main.class.getResource("resources/cryptoGX.png").toExternalForm()));
|
((Stage) enDecryptError.getDialogPane().getScene().getWindow()).getIcons().add(new Image(Main.class.getResource("resources/cryptoGX.png").toExternalForm()));
|
||||||
|
enDecryptError.getDialogPane().setContent(new Label(message));
|
||||||
|
|
||||||
Scene window = enDecryptError.getDialogPane().getScene();
|
Scene window = enDecryptError.getDialogPane().getScene();
|
||||||
|
|
||||||
@ -243,6 +297,8 @@ public class Main extends Application {
|
|||||||
* <p>Shows an warning alert window</p>
|
* <p>Shows an warning alert window</p>
|
||||||
*
|
*
|
||||||
* @param message that the alert window will show
|
* @param message that the alert window will show
|
||||||
|
*
|
||||||
|
* @since 1.4.0
|
||||||
*/
|
*/
|
||||||
protected static void warningAlert(String message) {
|
protected static void warningAlert(String message) {
|
||||||
AtomicReference<Double> alertX = new AtomicReference<>(Screen.getPrimary().getBounds().getMaxX() / 2);
|
AtomicReference<Double> alertX = new AtomicReference<>(Screen.getPrimary().getBounds().getMaxX() / 2);
|
||||||
@ -252,6 +308,7 @@ public class Main extends Application {
|
|||||||
enDecryptError.initStyle(StageStyle.UNDECORATED);
|
enDecryptError.initStyle(StageStyle.UNDECORATED);
|
||||||
enDecryptError.setTitle("Error");
|
enDecryptError.setTitle("Error");
|
||||||
((Stage) enDecryptError.getDialogPane().getScene().getWindow()).getIcons().add(new Image(Main.class.getResource("resources/cryptoGX.png").toExternalForm()));
|
((Stage) enDecryptError.getDialogPane().getScene().getWindow()).getIcons().add(new Image(Main.class.getResource("resources/cryptoGX.png").toExternalForm()));
|
||||||
|
enDecryptError.getDialogPane().setContent(new Label(message));
|
||||||
|
|
||||||
Scene window = enDecryptError.getDialogPane().getScene();
|
Scene window = enDecryptError.getDialogPane().getScene();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user