DecryptWindow.java 6.09 KB
package cryptor;

import javax.swing.*;
import javax.swing.filechooser.FileView;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.Date;

class DecryptWindow extends Frame {
    Label lpwd;

    Label lmod;

    TextField tfId;

    TextField tfPwd;

    TextField tfMod;

    Button ok;

    String fileIn;

    String fileName;

    String userId;

    String userPW;


    DecryptWindow(String title, String ID, String PW){

        //Frame(String title)을 호출한다.

        super(title);

        userId = ID;
        userPW = PW;

        //Label의 text정렬을 오른쪽으로
        String folderDir = ".\\" + userId + "\\Encrypted";

        final File dirToLock = new File(folderDir);
        JFileChooser jfc = new JFileChooser(dirToLock);
        jfc.setFileView(new FileView() {
            @Override
            public Boolean isTraversable(File f) {
                return dirToLock.equals(f);
            }
        });

        jfc.showOpenDialog(null);
        fileIn = jfc.getSelectedFile().getAbsolutePath();
        fileName = jfc.getSelectedFile().getName();

        lpwd = new Label("Enter password: ",Label.RIGHT);

        lmod = new Label("열람 목적: ",Label.RIGHT);


        //약 10개의 글자를 입력할 수 있는 TextField 생성.

        tfPwd = new TextField(10);

        tfMod = new TextField(10);
        //입력한 값 대신 '*'이 보이게 한다.



        ok = new Button("OK");

        //OK버튼과 TextField에 이벤트처리를 위한 Listener를 추가해준다.

        tfPwd.addActionListener(new EventHandler());

        tfMod.addActionListener(new EventHandler());

        ok.addActionListener(new EventHandler());



        //LayoutManager를 FlowLayout으로

        setLayout(new FlowLayout());

        //생성한 component들을 Frame에 포함시킨다.

        add(lpwd);

        add(tfPwd);

        add(lmod);

        add(tfMod);

        add(ok);

        setSize(450,65);

        //화면이 보이게 한다.

        setVisible(true);

    }

    public static void main(String args[]){

        DecryptWindow f = new DecryptWindow("Login", "user1", "12345678");

    }



    class EventHandler implements ActionListener{

        public void actionPerformed(ActionEvent e){

            //tfId에  입력되어있는 text를 얻어온다.

            dispose();

            String passwd = userId + ' ' + tfPwd.getText();
            char[] password = passwd.toCharArray();
            String passwd2 = userId + ' ' + userPW;
            char[] password2 = passwd2.toCharArray();

            String modeIn = tfMod.getText();

            String dir = ".\\" + userId + "\\logs\\" + fileName + ".txt";
            File file = new File(dir);
            file.getParentFile().mkdir();
            try {
                file.createNewFile();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }

            dir = ".\\" + userId + "\\Decrypted\\" + fileName;
            file = new File(dir);
            file.getParentFile().mkdir();

            try {
                Cryptor.decrypt(fileIn, dir, password);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            } catch (GeneralSecurityException generalSecurityException) {
                generalSecurityException.printStackTrace();
            }

            dir = ".\\" + userId + "\\logs\\" + fileName + ".txt";
            String dir2 = ".\\" + userId + "\\logs\\" + fileName + ".log";
            try {
                Cryptor.decrypt(dir2, dir, password2);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            } catch (GeneralSecurityException generalSecurityException) {
                generalSecurityException.printStackTrace();
            }

            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(dir,true);
            } catch (FileNotFoundException fileNotFoundException) {
                fileNotFoundException.printStackTrace();
            }
            SimpleDateFormat format1 = new SimpleDateFormat( "yyyy-MM-dd HH:mm");

            Date time = new Date();

            String time1 = format1.format(time);
            String toWrite = "열람\t" + time1 + '\t' + modeIn + '\n';
            byte[] b = toWrite.getBytes();
            try {
                fos.write(b);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
            try {
                fos.flush();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
            try {
                fos.close();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }

            try {
                Cryptor.encrypt(dir, dir2, password2);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            } catch (GeneralSecurityException generalSecurityException) {
                generalSecurityException.printStackTrace();
            }

            file = new File(dir);
            file.delete();

            String folderDir = ".\\" + userId + "\\Decrypted";

            final File dirToLock = new File(folderDir);
            JFileChooser jfc = new JFileChooser(dirToLock);
            jfc.setFileView(new FileView() {
                @Override
                public Boolean isTraversable(File f) {
                    return dirToLock.equals(f);
                }
            });

            jfc.showOpenDialog(null);
            fileIn = jfc.getSelectedFile().getAbsolutePath();
            file = new File(fileIn);

            try {
                Desktop.getDesktop().open(file);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }

    }

}