Java tutorial
import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.swing.ButtonGroup; import javax.swing.JCheckBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MessageDigestTest { public static void main(String[] args) { JFrame f = new MessageDigestFrame(); f.show(); } } class MessageDigestFrame extends JFrame { public MessageDigestFrame() { setTitle("MessageDigestTest"); setSize(400, 200); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); JPanel panel = new JPanel(); ButtonGroup group = new ButtonGroup(); ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent event) { JCheckBox b = (JCheckBox) event.getSource(); setAlgorithm(b.getText()); } }; addCheckBox(panel, "SHA-1", group, true, listener); addCheckBox(panel, "MD5", group, false, listener); Container contentPane = getContentPane(); contentPane.add(panel, "North"); contentPane.add(new JScrollPane(message), "Center"); contentPane.add(digest, "South"); digest.setFont(new Font("Monospaced", Font.PLAIN, 12)); setAlgorithm("SHA-1"); JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("File"); JMenuItem fileDigestItem = new JMenuItem("File digest"); fileDigestItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { loadFile(); } }); menu.add(fileDigestItem); JMenuItem textDigestItem = new JMenuItem("Text area digest"); textDigestItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { String m = message.getText(); computeDigest(m.getBytes()); } }); menu.add(textDigestItem); menuBar.add(menu); setJMenuBar(menuBar); } public void addCheckBox(Container c, String name, ButtonGroup g, boolean selected, ActionListener listener) { JCheckBox b = new JCheckBox(name, selected); c.add(b); g.add(b); b.addActionListener(listener); } public void setAlgorithm(String alg) { try { currentAlgorithm = MessageDigest.getInstance(alg); digest.setText(""); } catch (NoSuchAlgorithmException e) { digest.setText("" + e); } } public void loadFile() { JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); int r = chooser.showOpenDialog(this); if (r == JFileChooser.APPROVE_OPTION) { String name = chooser.getSelectedFile().getAbsolutePath(); computeDigest(loadBytes(name)); } } public byte[] loadBytes(String name) { FileInputStream in = null; try { in = new FileInputStream(name); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); int ch; while ((ch = in.read()) != -1) buffer.write(ch); return buffer.toByteArray(); } catch (IOException e) { if (in != null) { try { in.close(); } catch (IOException e2) { } } return null; } } public void computeDigest(byte[] b) { currentAlgorithm.reset(); currentAlgorithm.update(b); byte[] hash = currentAlgorithm.digest(); String d = ""; for (int i = 0; i < hash.length; i++) { int v = hash[i] & 0xFF; if (v < 16) d += "0"; d += Integer.toString(v, 16).toUpperCase() + " "; } digest.setText(d); } private JTextArea message = new JTextArea(); private JTextField digest = new JTextField(); private MessageDigest currentAlgorithm; }