import java.awt.*;
import java.awt.event.*;
import java.security.*;
import java.util.Hashtable;
class Main
{
public static void main(String args[])
{
new MainWindow();
}
}
class MainWindow extends Frame
{
TextField user,password;
Hashtable list;
public MainWindow()
{
super("Message Digest Test");
// ウインドウリスナの定義
WindowListener listener = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
addWindowListener(listener);
// アカウントの発行
list = new Hashtable();
createAccount();
// 3行1列のレイアウトに設定
setLayout(new GridLayout(3,1));
// ユーザー名入力部の生成
Panel p1 = new Panel();
user = new TextField(16);
p1.add(new Label("UserName",Label.CENTER));
p1.add(user);
// パスワード入力部の生成
Panel p2 = new Panel();
password = new TextField(16);
password.setEchoChar('*');
p2.add(new Label("Password",Label.CENTER));
p2.add(password);
// ログインボタンの生成
Button login = new Button("Login");
ActionListener listener_login = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(checkAccount(user.getText(),password.getText()))
System.out.println("ログインに成功しました。");
else
System.out.println("パスワードが違います。");
}
};
login.addActionListener(listener_login);
// ウインドウへのコンポーネントの配置
add(p1);
add(p2);
add(login);
// ウインドウの表示
setFont(new Font("monospaced",Font.PLAIN,16));
pack();
setVisible(true);
}
private void createAccount()
{
String user_name = "user";
String password = "ABCDE";
byte valid_password[];
try
{
// MD5アルゴリズム
MessageDigest md5 = MessageDigest.getInstance("MD5");
// パスワードから、ハッシュコードを生成する
valid_password = md5.digest(password.getBytes());
list.put(user_name,valid_password);
}
catch(NoSuchAlgorithmException ex)
{
System.err.println(ex);
}
}
private boolean checkAccount(String user_name,String password)
{
try
{
// MD5アルゴリズム
MessageDigest md5 = MessageDigest.getInstance("MD5");
// パスワードから、ハッシュコードを生成する
byte user_password[] = md5.digest(password.getBytes());
// 入力されたユーザー名を元にテーブルを参照し、登録済みのパスワードを得る
byte valid_password[] = (byte[])list.get(user_name);
if(valid_password == null)
{
System.err.println(user_name + "はアカウントを持っていません。");
System.exit(-1);
}
// 二つのハッシュコードを比較する
return(MessageDigest.isEqual(user_password,valid_password));
}
catch(NoSuchAlgorithmException ex)
{
System.err.println(ex);
return(false);
}
}
}
Source is here. (ZIP Format,Byte,Shift-JIS)