SignUp.java 5.03 KB
package cryptor;

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.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

class SignUp extends Frame {

    Label lid;

    Label lpwd;

    TextField tfId;

    TextField tfPwd;

    Button ok;

    SignUp(String title){

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

        super(title);

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

        //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");

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

        tfId.addActionListener(new EventHandler());

        tfPwd.addActionListener(new EventHandler());

        ok.addActionListener(new EventHandler());



        //LayoutManager를 FlowLayout으로

        setLayout(new FlowLayout());

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

        add(lid);

        add(tfId);

        add(lpwd);

        add(tfPwd);


        add(ok);

        setSize(450,80);

        this.setLocationRelativeTo(null);

        //화면이 보이게 한다.

        setVisible(true);

    }

    public static void main(String args[]){

        SignUp f = new SignUp("Sign Up");

    }



    class EventHandler implements ActionListener{

        public void actionPerformed(ActionEvent e){

            if(tfId.getText().length() < 1 || tfPwd.getText().length() < 1)
            {
                JOptionPane.showMessageDialog(null,"ID and password cannot be null.");
                return;
            }

            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())
            {
                dispose();

                File file = new File(dir);
                file.getParentFile().mkdir();
                try {
                    file.createNewFile();
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }

                FileOutputStream fos = null;
                try {
                    fos = new FileOutputStream(file);
                } catch (FileNotFoundException fileNotFoundException) {
                    fileNotFoundException.printStackTrace();
                }

                String toWrite = null;
                try {
                    toWrite = tfId.getText() + '\t' + byteToHexString(sha256(tfPwd.getText()));
                } catch (NoSuchAlgorithmException noSuchAlgorithmException) {
                    noSuchAlgorithmException.printStackTrace();
                }

                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, password);
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                } catch (GeneralSecurityException generalSecurityException) {
                    generalSecurityException.printStackTrace();
                }

                file.delete();
            }
            else
            {
                JOptionPane.showMessageDialog(null,tfId.getText() + " already exists!");
            }
        }

        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();
        }
    }

}