com.jfx.md5
Class MD5

java.lang.Object
  extended by com.jfx.md5.MD5

public class MD5
extends java.lang.Object

Fast implementation of RSA's MD5 hash generator in Java JDK Beta-2 or higher
Originally written by Santeri Paavolainen, Helsinki Finland 1996
(c) Santeri Paavolainen, Helsinki Finland 1996
Some changes Copyright (c) 2002 Timothy W Macinta

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.

You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

See http://www.cs.hut.fi/~santtu/java/ for more information on this class.

This is rather straight re-implementation of the reference implementation given in RFC1321 by RSA.

Passes MD5 test suite as defined in RFC1321.

Some optimizations made by Timothy W Macinta. Reduced time to checksum a test file from 1m31.210s to 0m14.300s. This is roughly twice as fast as using java.security.MessageDigest which takes 0m28.900s. For further optimization, the Transform() and Decode() methods are natural choices for re-implementation using native methods.

Some bug fixes also made by Timothy W Macinta.

Please note: I (Timothy Macinta) have put this code in the com.twmacinta.util package only because it came without a package. I was not the the original author of the code, although I did optimize it (substantially) and fix some bugs.

This Java class has been derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm and its reference implementation.

Author:
Santeri Paavolainen , Timothy W Macinta (twm@alum.mit.edu) (optimizations and bug fixes)

Constructor Summary
MD5()
          Class constructor
MD5(java.lang.Object ob)
          Initialize class, and update hash with ob.toString()
 
Method Summary
 java.lang.String asHex()
          Returns 32-character hex representation of this objects hash
static java.lang.String asHex(byte[] hash)
          Turns array of bytes into string representing each byte as unsigned hex number.
static java.lang.String asHex(byte[] hash, int offset, int length)
           
 byte[] Final()
          Returns array of bytes (16 bytes) representing hash as of the current state of this object.
 void Init()
          Initialize MD5 internal state (object can be reused just by calling Init() after every Final()
static java.lang.String MD5(byte[] input)
           
static java.lang.String MD5(java.lang.String input)
           
static java.lang.String MD5(java.lang.String input, java.lang.String encoding)
           
 void Update(byte b)
          Updates hash with a single byte
 void Update(byte[] buffer)
          Updates hash with given array of bytes
 void Update(byte[] buffer, int length)
           
 void Update(byte[] buffer, int offset, int length)
          Plain update, updates this object
 void Update(int i)
          Update buffer with a single integer (only & 0xff part is used, as a byte)
 void Update(com.jfx.md5.MD5State state, byte[] buffer, int offset, int length)
          Updates hash with the bytebuffer given (using at maximum length bytes from that buffer)
 void Update(java.lang.String s)
          Update buffer with given string.
 void Update(java.lang.String s, java.lang.String charset_name)
          Update buffer with given string using the given encoding.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MD5

public MD5()
Class constructor


MD5

public MD5(java.lang.Object ob)
Initialize class, and update hash with ob.toString()

Parameters:
ob - Object, ob.toString() is used to update hash after initialization
Method Detail

Init

public void Init()
Initialize MD5 internal state (object can be reused just by calling Init() after every Final()


MD5

public static java.lang.String MD5(java.lang.String input)

MD5

public static java.lang.String MD5(java.lang.String input,
                                   java.lang.String encoding)
                            throws java.io.UnsupportedEncodingException
Throws:
java.io.UnsupportedEncodingException

MD5

public static java.lang.String MD5(byte[] input)

Update

public void Update(com.jfx.md5.MD5State state,
                   byte[] buffer,
                   int offset,
                   int length)
Updates hash with the bytebuffer given (using at maximum length bytes from that buffer)

Parameters:
state - Which state is updated
buffer - Array of bytes to be hashed
offset - Offset to buffer array
length - Use at maximum `length' bytes (absolute maximum is buffer.length)

Update

public void Update(byte[] buffer,
                   int offset,
                   int length)
Plain update, updates this object


Update

public void Update(byte[] buffer,
                   int length)

Update

public void Update(byte[] buffer)
Updates hash with given array of bytes

Parameters:
buffer - Array of bytes to use for updating the hash

Update

public void Update(byte b)
Updates hash with a single byte

Parameters:
b - Single byte to update the hash

Update

public void Update(java.lang.String s)
Update buffer with given string. Note that because the version of the s.getBytes() method without parameters is used to convert the string to a byte array, the results of this method may be different on different platforms. The s.getBytes() method converts the string into a byte array using the current platform's default character set and may therefore have different results on platforms with different default character sets. If a version that works consistently across platforms with different default character sets is desired, use the overloaded version of the Update() method which takes a string and a character encoding.

Parameters:
s - String to be update to hash (is used as s.getBytes())

Update

public void Update(java.lang.String s,
                   java.lang.String charset_name)
            throws java.io.UnsupportedEncodingException
Update buffer with given string using the given encoding. If the given encoding is null, the encoding "ISO8859_1" is used.

Parameters:
s - String to be update to hash (is used as s.getBytes(charset_name))
charset_name - The character set to use to convert s to a byte array, or null if the "ISO8859_1" character set is desired.
Throws:
java.io.UnsupportedEncodingException - If the named charset is not supported.

Update

public void Update(int i)
Update buffer with a single integer (only & 0xff part is used, as a byte)

Parameters:
i - Integer value, which is then converted to byte as i & 0xff

Final

public byte[] Final()
Returns array of bytes (16 bytes) representing hash as of the current state of this object. Note: getting a hash does not invalidate the hash object, it only creates a copy of the real state which is finalized.

Returns:
Array of 16 bytes, the hash of all updated bytes

asHex

public static java.lang.String asHex(byte[] hash)
Turns array of bytes into string representing each byte as unsigned hex number.

Parameters:
hash - Array of bytes to convert to hex-string
Returns:
Generated hex string

asHex

public static java.lang.String asHex(byte[] hash,
                                     int offset,
                                     int length)

asHex

public java.lang.String asHex()
Returns 32-character hex representation of this objects hash

Returns:
String of this object's hash


Copyright © 2008-2009 Roman Gerasimenko.