01: /*
02: * Lucane - a collaborative platform
03: * Copyright (C) 2004 Vincent Fiack <vfiack@mail15.com>
04: *
05: * This library is free software; you can redistribute it and/or
06: * modify it under the terms of the GNU Lesser General Public
07: * License as published by the Free Software Foundation; either
08: * version 2.1 of the License, or (at your option) any later version.
09: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public
16: * License along with this library; if not, write to the Free Software
17: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18: */
19: package org.lucane.common.crypto;
20:
21: import java.io.UnsupportedEncodingException;
22: import java.security.MessageDigest;
23: import java.security.NoSuchAlgorithmException;
24:
25: public class MD5 {
26: private static final char[] hex = { '0', '1', '2', '3', '4', '5',
27: '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', };
28:
29: /**
30: * Turns array of bytes into string representing each byte as
31: * unsigned hex number.
32: *
33: * @param hash array of bytes to convert to hex-string
34: * @return generated hex string
35: */
36: private static final String toHex(byte hash[]) {
37: StringBuffer buf = new StringBuffer(hash.length * 2);
38:
39: for (int idx = 0; idx < hash.length; idx++)
40: buf.append(hex[(hash[idx] >> 4) & 0x0f]).append(
41: hex[hash[idx] & 0x0f]);
42:
43: return buf.toString();
44: }
45:
46: /**
47: * Digest the input.
48: *
49: * @param input the data to be digested.
50: * @return the md5-digested input
51: */
52: private static final byte[] digest(byte[] input) {
53: try {
54: MessageDigest md5 = MessageDigest.getInstance("MD5");
55: return md5.digest(input);
56: } catch (NoSuchAlgorithmException nsae) {
57: throw new Error(nsae.toString());
58: }
59: }
60:
61: /**
62: * Digest the input.
63: *
64: * @param input1 the first part of the data to be digested.
65: * @param input2 the second part of the data to be digested.
66: * @return the md5-digested input
67: */
68: private static final byte[] digest(byte[] input1, byte[] input2) {
69: try {
70: MessageDigest md5 = MessageDigest.getInstance("MD5");
71: md5.update(input1);
72: return md5.digest(input2);
73: } catch (NoSuchAlgorithmException nsae) {
74: throw new Error(nsae.toString());
75: }
76: }
77:
78: /**
79: * Digest the input.
80: *
81: * @param input the data to be digested.
82: * @return the md5-digested input as a hex string
83: */
84: public static final String encode(String input) {
85: try {
86: return toHex(digest(input.getBytes("8859_1")));
87: } catch (UnsupportedEncodingException uee) {
88: throw new Error(uee.toString());
89: }
90: }
91: }
|