This class computes a message digest (also known as a cryptographic checksum) for an arbitrary sequence of bytes. Obtain a MessageDigest object by calling one of the static getInstance( ) factory methods and specifying the desired algorithm (e.g., SHA or MD5) and, optionally , the desired provider. Next, specify the data to be digested by calling any of the update( ) methods one or more times. Prior to Java 5.0, you must pass a byte[ ] to update( ) . In Java 5.0 and later, however, you can also use a java.nio.ByteBuffer . This facilitates the computation of message digests when using the New I/O API. After you pass data to update( ) , call digest( ) , which computes the message digest and returns it as an array of bytes. If you have only one array of bytes to be digested, you can pass it directly to digest( ) and skip the update( ) step. When you call digest( ) , the MessageDigest( ) object is reset and is then ready to compute a new digest. You can also explicitly reset a MessageDigest without computing the digest by calling reset( ) . To compute a digest for part of a message without resetting the MessageDigest , clone the MessageDigest and call digest( ) on the cloned copy. Note that not all implementations are cloneable, so the clone( ) method may throw an exception. The MessageDigest class is often used in conjunction with DigestInputStream and DigestOutputStream , which automate the update( ) calls for you. Figure 14-24. java.security.MessageDigestpublic abstract class MessageDigest extends MessageDigestSpi { // Protected Constructors protected MessageDigest (String algorithm ); // Public Class Methods public static MessageDigest getInstance (String algorithm ) throws NoSuchAlgorithmException; public static MessageDigest getInstance (String algorithm , String provider ) throws NoSuchAlgorithmException, NoSuchProviderException; 1.4 public static MessageDigest getInstance (String algorithm , Provider provider ) throws NoSuchAlgorithmException; public static boolean isEqual (byte[ ] digesta , byte[ ] digestb ); // Public Instance Methods public byte[ ] digest ( ); public byte[ ] digest (byte[ ] input ); 1.2 public int digest (byte[ ] buf , int offset , int len ) throws DigestException; public final String getAlgorithm ( ); 1.2 public final int getDigestLength ( ); 1.2 public final Provider getProvider ( ); public void reset ( ); public void update (byte input ); public void update (byte[ ] input ); 5.0 public final void update (java.nio.ByteBuffer input ); public void update (byte[ ] input , int offset , int len ); // Public Methods Overriding MessageDigestSpi public Object clone ( ) throws CloneNotSupportedException; // Public Methods Overriding Object public String toString ( ); } Passed ToDigestInputStream.{DigestInputStream( ) , setMessageDigest( )} , DigestOutputStream.{DigestOutputStream( ) , setMessageDigest( )} Returned ByDigestInputStream.getMessageDigest( ) , DigestOutputStream.getMessageDigest( ) Type OfDigestInputStream.digest , DigestOutputStream.digest |