SignIn.java 4.95 KB
package cryptor;

import javax.annotation.processing.Filer;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

class SignIn extends Frame {

    Label lid;

    Label lpwd;

    TextField tfId;

    TextField tfPwd;

    Button ok;

    Button su;

    SignIn(String title){

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

        super(title);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                dispose();
                System.exit(0);
            }
        });

        //Label의 text정렬을 오른쪽으로

        lid = new Label("ID : ",Label.RIGHT);

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


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

        tfId = new TextField(10);

        tfPwd = new TextField(10);

        //입력한 값 대신 '*'이 보이게 한다.
        tfPwd.setEchoChar('*');

        ok = new Button("OK");

        su = new Button("Sign Up");

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

        tfId.addActionListener(new EventHandler());

        tfPwd.addActionListener(new EventHandler());

        ok.addActionListener(new EventHandler());

        su.addActionListener(e -> {
            SignUp f = new SignUp("Sign Up");
        });


        //LayoutManager를 FlowLayout으로

        setLayout(new FlowLayout());

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

        add(lid);

        add(tfId);

        add(lpwd);

        add(tfPwd);


        add(ok);

        add(su);

        setSize(450,80);

        this.setLocationRelativeTo(null);

        //화면이 보이게 한다.

        setVisible(true);

    }

    public static void main(String args[]){

        SignIn f = new SignIn("Sign In");

    }



    class EventHandler implements ActionListener{

        public void actionPerformed(ActionEvent e){

            String passwd = tfId.getText() + ' ' + tfPwd.getText();
            char[] password = passwd.toCharArray();

            String dir = ".\\Users\\" + tfId.getText() + ".txt";
            String dir2 = ".\\Users\\" + tfId.getText() + ".info";
            File f = new File(dir2);
            if(f.exists())
            {
                try {
                    Cryptor.decrypt(dir2,dir,password);
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                } catch (GeneralSecurityException generalSecurityException) {
                    JOptionPane.showMessageDialog(null,"Password is invalid!");
                    return;
                }

                dispose();

                File file = new File(dir);
                FileReader fr = null;
                try {
                    fr = new FileReader(file);
                } catch (FileNotFoundException fileNotFoundException) {
                    fileNotFoundException.printStackTrace();
                }

                BufferedReader bufReader = new BufferedReader(fr);
                String line = "";
                try {
                    line = bufReader.readLine();
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }
                String[] strs = line.split(String.valueOf('\t'));

                try {
                    fr.close();
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }

                file.delete();

                try {
                    if(strs[1].equals(byteToHexString(sha256(tfPwd.getText()))))
                    {
                        MainMenu mm = new MainMenu("Main Menu", strs[0], tfPwd.getText());
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null,"Password is invalid!");
                    }
                } catch (NoSuchAlgorithmException noSuchAlgorithmException) {
                    noSuchAlgorithmException.printStackTrace();
                }
            }
            else
            {
                JOptionPane.showMessageDialog(null,tfId.getText() + " has never signed Up!");
            }
        }

        public byte[] sha256(String msg)  throws NoSuchAlgorithmException {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(msg.getBytes());

            return md.digest();
        }

        public String byteToHexString(byte[] data) {
            StringBuilder sb = new StringBuilder();

            for (byte b : data) {
                sb.append(String.format("%02x", b));
            }

            return sb.toString();
        }
    }

}