It is critical to use the algorithm.reset() command before using a
MessageDigest
instance, as if there are bytes still remaining from a prior digest, it will completely ruin your output.Code
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
// calculates an MD5sum for a given bit of text
public class MD5
{
public static void main(String[] args)
{
try
{
MessageDigest algorithm = MessageDigest.getInstance("MD5");
algorithm.reset(); // clear the digest back to starting state.
// Get selected digest of the given text.
byte[] digest = algorithm.digest( "Hello, world!".getBytes() );
System.out.println(byteArrToHex(digest));
}
catch (NoSuchAlgorithmException e)
{
// no such algorithm, MD5
}
}
// converts bytes to text.
private static String byteArrToHex(byte[] bytes)
{
StringBuilder sb = new StringBuilder();
for(byte b : bytes)
sb.append(String.format("%02X", b));
return sb.toString().toLowerCase();
}
}
Other Notes
- To calculate SHA1 hashes instead, use
SHA1
as the instance type. - The
NoSuchAlgorithmException
likely won't be thrown on desktop platforms, but it is possible that certain algorithms won't be implemented in certain areas due to them being considered military grade encryption; SHA1 and MD5 shouldn't have this problem because they are just simple hashes.
No comments:
Post a Comment