методы не работают должным образом в файле JAR - PullRequest
0 голосов
/ 15 сентября 2018
package sample;


import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.stage.FileChooser;
import javafx.stage.Stage;


import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;


public class Controller {
    Crypto crypto = new Crypto();
    private String username = "user19i2h3";
    private String password = "A9m3n442";
    @FXML
    private Label lblCrypto;
    @FXML
    private TextField txtUserName;
    @FXML
    private TextField txtPassword;
    @FXML
    private TextField txtFilePath;
    @FXML
    private Label label1;
    @FXML
    private TextArea txtArea;
    public void login(ActionEvent event) {
        try {
            if (txtUserName.getText().equals(username) && txtPassword.getText().equals(password)) {
                lblCrypto.setText("Success!");
                Stage primaryStage = new Stage();
                Parent root = FXMLLoader.load(getClass().getResource("window.fxml"));
                Scene scene = new Scene(root, 600, 600);
                primaryStage.setScene(scene);
                primaryStage.setTitle("CRYPTO");
                primaryStage.show();

                ((Node) (event.getSource())).getScene().getWindow().hide();

            } else {
                lblCrypto.setText("Try again!");
            }
        } catch (Exception e) {
            System.out.println(e);
        }


    }

    public void encryption(ActionEvent event) {
        try {
            txtArea.clear();
            String text = fileLoading();
            int textLength = text.length();
            crypto.encryption(textLength, text);
            String encryptedText = crypto.sb.toString();
            fileRewriting(encryptedText);
            txtArea.appendText(encryptedText);
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("Status...");
            alert.setHeaderText("Results:");
            alert.setContentText("Encrypted!");
            alert.showAndWait();
        } catch (Exception e) {
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("Wrong file path!");
            alert.setHeaderText("Results:");
            alert.setContentText("Wrong file path!");
            alert.showAndWait();
        }

    }

    public void decryption(ActionEvent event) {
        try {
            txtArea.clear();
            String text1 = fileLoading();
            int textLength1 = text1.length();
            crypto.decryption(text1, textLength1);
            String decryptedText = crypto.sb2.toString();
            fileRewriting(decryptedText);
            txtArea.appendText(decryptedText);
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("Status");
            alert.setHeaderText("Results:");
            alert.setContentText("Decrypted!");
            alert.showAndWait();
        } catch (Exception e) {
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("Wrong file path!");
            alert.setHeaderText("Results:");
            alert.setContentText("Wrong file path!");

            alert.showAndWait();
        }

    }

    public void fileChooser(ActionEvent event) {
        FileChooser fc = new FileChooser();
        FileChooser.ExtensionFilter fileExtensions =
                new FileChooser.ExtensionFilter("Text files", "*.txt");
        fc.getExtensionFilters().add(fileExtensions);
        File file=fc.showOpenDialog(null);
        String str=file.toString();
        String realFilePath = str.replaceAll("\\\\","/");
        System.out.println(realFilePath);
        ; if(file != null){
            label1.setText(realFilePath);
        }

    }


    public String fileLoading() {
        try {
            FileReader fileReader = new FileReader(label1.getText());
            BufferedReader reader = new BufferedReader(fileReader);
            String text = "";
            String line = reader.readLine();
            while (line != null) {
                text += line;
                line = reader.readLine();
            }
            return text;
        } catch (IOException e) {
            System.out.println("File not found!");
        }
        return null;
    }
    public void fileRewriting(String text2) {
        String strPath =label1.getText() ;
        Path pathOfNewFile = Paths.get(strPath);
        try {
            BufferedWriter bufWriter = Files.newBufferedWriter(pathOfNewFile, StandardCharsets.UTF_8, StandardOpenOption.CREATE);
            bufWriter.write(text2);
            bufWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Методы шифрования и дешифрования не работают должным образом. Они прекрасно работают в Intellij Idea, но когда я делаю jar-файл, они добавляют некоторые дополнительные знаки в текстовый файл. Например, у меня есть текстовый файл с содержанием: сегодня хороший день. После шифрования: ^ÅÉ ^ ynk * s} k qyyn * nkùÅÉ ^ ynk * s} k qyyn * nk. После расшифровки: ¹¯¹ «¹… Тода¸ƈ - хороший да¸ƈ¹¯¹« ¹… Тода¸ƈ - хороший да¸ƈ¹¯¹ «¹… Тода¸ƈ - хороший да¸ƈ

1 Ответ

0 голосов
/ 15 сентября 2018

Если вам нужно поместить ваши зашифрованные данные в строку, вы должны закодировать зашифрованные байтовый массив с Base 64. В противном случае ваши данные могут быть повреждены:

byte[] encryptedByteArray; String encodedData = new String(Base64.getEncoder().encode(encryptedByteArray);

А для декодирования:

byte[] decodedBytes = Base64.getDecoder().decode(encodedData.getBytes());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...