JavaTM 2 Platform
Standard Ed. 6

java.security
類別 MessageDigest

java.lang.Object
  繼承者 java.security.MessageDigestSpi
      繼承者 java.security.MessageDigest

public abstract class MessageDigest
extends MessageDigestSpi

此 MessageDigest 類別為應用程序提供資訊摘要演算法的功能,如 MD5 或 SHA 演算法。資訊摘要是安全的單向雜湊函數,它接收任意大小的資料,並輸出固定長度的雜湊值。

MessageDigest 物件開始被初始化。該物件通過使用 update 方法處理資料。任何時候都可以調用 reset 方法重置摘要。一旦所有需要更新的資料都已經被更新了,應該調用 digest 方法之一完成雜湊計算。

對於給定數量的更新資料,digest 方法只能被調用一次。在調用 digest 之後,MessageDigest 物件被重新設置成其初始狀態。

該實作可隨意選擇是否實作 Cloneable 介面。客戶端應用程可以通過嘗試複製和捕獲 CloneNotSupportedException 來測試可複製性:

 MessageDigest md = MessageDigest.getInstance("SHA");

 try {
     md.update(toChapter1);
     MessageDigest tc1 = md.clone();
     byte[] toChapter1Digest = tc1.digest();
     md.update(toChapter2);
     ...etc.
 } catch (CloneNotSupportedException cnse) {
     throw new DigestException("couldn't make digest of partial content");
 }
 

注意,如果給定的實作是不可複製的,而事先已經知道摘要的數目,則仍然能夠通過實例化幾個實例計算中間摘要。

注意,由於歷史原因,此類別是抽象類別,是從 MessageDigestSpi 擴展的。應用程序開發人員只需注意在此 MessageDigest 類別中定義的方法;父級類別中的所有方法是供希望提供自己的資訊摘要演算法實作的加密服務提供者使用的。

另請參見:
DigestInputStream, DigestOutputStream

建構子摘要
protected MessageDigest(String algorithm)
          創建具有指定演算法名稱的資訊摘要。
 
方法摘要
 Object clone()
          如果實作是可複製的,則返回一個副本。
 byte[] digest()
          通過執行諸如填充之類別的最終操作完成雜湊計算。
 byte[] digest(byte[] input)
          使用指定的 byte 陣列對摘要進行最後更新,然後完成摘要計算。
 int digest(byte[] buf, int offset, int len)
          通過執行諸如填充之類別的最終操作完成雜湊計算。
 String getAlgorithm()
          返回標識演算法的獨立於實作細節的字元串。
 int getDigestLength()
          返回以位元組為單位的摘要長度,如果提供者不支持此操作並且實作是不可複製的,則返回 0。
static MessageDigest getInstance(String algorithm)
          返回實作指定摘要演算法的 MessageDigest 物件。
static MessageDigest getInstance(String algorithm, Provider provider)
          返回實作指定摘要演算法的 MessageDigest 物件。
static MessageDigest getInstance(String algorithm, String provider)
          返回實作指定摘要演算法的 MessageDigest 物件。
 Provider getProvider()
          返回此資訊摘要物件的提供者。
static boolean isEqual(byte[] digesta, byte[] digestb)
          比較兩個摘要的相等性。
 void reset()
          重置摘要以供再次使用。
 String toString()
          返回此資訊摘要物件的字元串表示形式。
 void update(byte input)
          使用指定的位元組更新摘要。
 void update(byte[] input)
          使用指定的 byte 陣列更新摘要。
 void update(byte[] input, int offset, int len)
          使用指定的 byte 陣列,從指定的偏移量開始更新摘要。
 void update(ByteBuffer input)
          使用指定的 ByteBuffer 更新摘要。
 
從類別 java.security.MessageDigestSpi 繼承的方法
engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate, engineUpdate
 
從類別 java.lang.Object 繼承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

MessageDigest

protected MessageDigest(String algorithm)
創建具有指定演算法名稱的資訊摘要。

參數:
algorithm - 摘要演算法的標準名稱。有關標準演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
方法詳細資訊

getInstance

public static MessageDigest getInstance(String algorithm)
                                 throws NoSuchAlgorithmException
返回實作指定摘要演算法的 MessageDigest 物件。

此方法從首選 Provider 開始遍歷已註冊安全提供者列表。返回封裝取自第一個 Provider 的 MessageDigestSpi 實作的新 MessageDigest 物件,第一個 Provider 支持指定演算法。

注意,可以通過 Security.getProviders() 方法獲取已註冊提供者列表。

參數:
algorithm - 所請求演算法的名稱。有關標準演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
返回:
實作指定演算法的 Message Digest 物件。
拋出:
NoSuchAlgorithmException - 如果沒有 Provider 支持指定演算法的 MessageDigestSpi 實作
另請參見:
Provider

getInstance

public static MessageDigest getInstance(String algorithm,
                                        String provider)
                                 throws NoSuchAlgorithmException,
                                        NoSuchProviderException
返回實作指定摘要演算法的 MessageDigest 物件。

返回封裝 MessageDigestSpi 實作的新 MessageDigest 物件,該實作取自指定提供者。指定提供者必須在安全提供者列表中註冊。

注意,可以通過 Security.getProviders() 方法獲取已註冊提供者列表。

參數:
algorithm - 所請求演算法的名稱。有關標準演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
provider - 提供者的名稱。
返回:
實作指定演算法的 MessageDigest 物件。
拋出:
NoSuchAlgorithmException - 如果指定演算法的 MessageDigestSpi 實作不能從指定提供者獲得。
NoSuchProviderException - 如果指定提供者未在安全提供者列表中註冊。
IllegalArgumentException - 如果提供者的名稱為 null 或空。
另請參見:
Provider

getInstance

public static MessageDigest getInstance(String algorithm,
                                        Provider provider)
                                 throws NoSuchAlgorithmException
返回實作指定摘要演算法的 MessageDigest 物件。

返回封裝 MessageDigestSpi 實作的新 MessageDigest 物件,該實作取自指定 Provider 物件。注意,指定 Provider 物件無需在提供者列表中註冊。

參數:
algorithm - 所請求演算法的名稱。有關標準演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
provider - 提供者。
返回:
實作指定演算法的 MessageDigest 物件。
拋出:
NoSuchAlgorithmException - 如果指定演算法的 MessageDigestSpi 實作不能從指定的提供者物件獲得。
IllegalArgumentException - 如果指定的提供者為 null。
從以下版本開始:
1.4
另請參見:
Provider

getProvider

public final Provider getProvider()
返回此資訊摘要物件的提供者。

返回:
此資訊摘要物件的提供者。

update

public void update(byte input)
使用指定的位元組更新摘要。

參數:
input - 用於更新摘要的位元組。

update

public void update(byte[] input,
                   int offset,
                   int len)
使用指定的 byte 陣列,從指定的偏移量開始更新摘要。

參數:
input - byte 陣列。
offset - byte 陣列中的偏移量,操作從此處開始。
len - 要使用的位元組數,始於 offset

update

public void update(byte[] input)
使用指定的 byte 陣列更新摘要。

參數:
input - byte 陣列。

update

public final void update(ByteBuffer input)
使用指定的 ByteBuffer 更新摘要。使用始於 input.position() 處的 input.remaining() 個位元組更新摘要。一旦返回,該緩衝區的位置將等於它的界限;它的界限將不會更改。

參數:
input - ByteBuffer
從以下版本開始:
1.5

digest

public byte[] digest()
通過執行諸如填充之類別的最終操作完成雜湊計算。在調用此方法之後,摘要被重置。

返回:
存放雜湊值結果的 byte 陣列。

digest

public int digest(byte[] buf,
                  int offset,
                  int len)
           throws DigestException
通過執行諸如填充之類別的最終操作完成雜湊計算。在調用此方法之後,摘要被重置。

參數:
buf - 存放計算摘要的輸出緩衝區
offset - 輸出緩衝區中的偏移量,從此處開始存儲摘要。
len - 在 buf 中分派給摘要的位元組數
返回:
放到 buf 中的位元組數
拋出:
DigestException - 如果發生錯誤。

digest

public byte[] digest(byte[] input)
使用指定的 byte 陣列對摘要進行最後更新,然後完成摘要計算。也就是說,此方法首先調用 update(input),向 update 方法傳遞 input 陣列,然後調用 digest()

參數:
input - 在完成摘要計算前要更新的輸入。
返回:
存放雜湊值結果的 byte 陣列。

toString

public String toString()
返回此資訊摘要物件的字元串表示形式。

覆寫:
類別 Object 中的 toString
返回:
該物件的字元串表示形式。

isEqual

public static boolean isEqual(byte[] digesta,
                              byte[] digestb)
比較兩個摘要的相等性。做簡單的位元組比較。

參數:
digesta - 要比較的摘要之一。
digestb - 要比較的另一個摘要。
返回:
如果摘要相等,則返回 true;否則返回 false

reset

public void reset()
重置摘要以供再次使用。


getAlgorithm

public final String getAlgorithm()
返回標識演算法的獨立於實作細節的字元串。此名稱應該是標準的 Java 安全名稱(如 "SHA"、"MD5" 等等)。有關標準演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。

返回:
演算法的名稱

getDigestLength

public final int getDigestLength()
返回以位元組為單位的摘要長度,如果提供者不支持此操作並且實作是不可複製的,則返回 0。

返回:
以位元組為單位的摘要長度,如果提供者不支持此操作並且實作是不可複製的,則返回 0。
從以下版本開始:
1.2

clone

public Object clone()
             throws CloneNotSupportedException
如果實作是可複製的,則返回一個副本。

覆寫:
類別 MessageDigestSpi 中的 clone
返回:
如果實作是可複製的,則返回一個副本。
拋出:
CloneNotSupportedException - 如果對一個不支持 Cloneable 的實作調用此方法。
另請參見:
Cloneable

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only