JavaTM 2 Platform
Standard Ed. 6

java.security
類別 Signature

java.lang.Object
  繼承者 java.security.SignatureSpi
      繼承者 java.security.Signature

public abstract class Signature
extends SignatureSpi

此 Signature 類別用來為應用程序提供數位簽章演算法功能。數位簽章用於確保數字資料的驗證和完整性。

在所有演算法當中,數位簽章可以是 NIST 標準的 DSA,它使用 DSA 和 SHA-1。可以將使用 SHA-1 訊息摘要演算法的 DSA 演算法指定為 SHA1withDSA。如果使用 RSA,對訊息摘要演算法則會有多種選擇,因此,可以將簽章演算法指定為 MD2withRSAMD5withRSASHA1withRSA。因為沒有預設的演算法名稱,所以必須為其指定名稱。

Signature 物件可用來產生和驗證數位簽章。

使用 Signature 物件簽章資料或驗證簽章包括以下三個階段:

  1. 初始化,使用

  2. 更新

    根據初始化型別,這可更新要簽章或驗證的位元組。請參見 update 方法。

  3. 簽署或驗證所有更新位元組的簽章。請參見 sign 方法和 verify 方法。

注意,由於歷史原因,此類別是從 SignatureSpi 中抽象出來的,並進行了擴展。應用程序開發人員只需注意在此 Signature 類別中定義的方法即可;父級類別中的所有方法都是供那些希望提供自己的數位簽章演算法實作的加密服務提供者使用的。


欄位摘要
protected static int SIGN
          可能的 state 值,表示此簽章物件已經初始化簽章。
protected  int state
          此簽章物件的當前狀態。
protected static int UNINITIALIZED
          可能的 state 值,表示尚未初始化此簽章物件。
protected static int VERIFY
          可能的 state 值,表示此簽章物件已經初始化驗證。
 
從類別 java.security.SignatureSpi 繼承的欄位
appRandom
 
建構子摘要
protected Signature(String algorithm)
          創建指定演算法的 Signature 物件。
 
方法摘要
 Object clone()
          如果此實作可以複製,則返回副本。
 String getAlgorithm()
          返回此簽章物件的演算法名稱。
static Signature getInstance(String algorithm)
          返回實作指定簽章演算法的 Signature 物件。
static Signature getInstance(String algorithm, Provider provider)
          返回實作指定簽章演算法的 Signature 物件。
static Signature getInstance(String algorithm, String provider)
          返回實作指定簽章演算法的 Signature 物件。
 Object getParameter(String param)
          已過時。  
 AlgorithmParameters getParameters()
          返回與此簽章物件一起使用的參數。
 Provider getProvider()
          返回此簽章物件的提供者。
 void initSign(PrivateKey privateKey)
          初始化這個用於簽章的物件。
 void initSign(PrivateKey privateKey, SecureRandom random)
          初始化這個用於簽章的物件。
 void initVerify(Certificate certificate)
          使用來自給定證書的公鑰初始化此用於驗證的物件。
 void initVerify(PublicKey publicKey)
          初始化此用於驗證的物件。
 void setParameter(AlgorithmParameterSpec params)
          使用指定的參數集初始化此簽章引擎。
 void setParameter(String param, Object value)
          已過時。 使用 setParameter 取代。
 byte[] sign()
          返回所有已更新資料的簽章位元組。
 int sign(byte[] outbuf, int offset, int len)
          完成簽章操作並從 offset 開始,將得到的簽章位元組存儲在提供的緩衝區 outbuf 中。
 String toString()
          返回此簽章物件的字元串表示形式,以提供包括物件狀態和所用演算法名稱在內的資訊。
 void update(byte b)
          更新要由位元組簽章或驗證的資料。
 void update(byte[] data)
          使用指定的 byte 陣列更新要簽章或驗證的資料。
 void update(byte[] data, int off, int len)
          從指定的偏移量開始,使用指定的 byte 陣列更新要簽章或驗證的資料。
 void update(ByteBuffer data)
          使用指定的 ByteBuffer 更新要簽章或驗證的資料。
 boolean verify(byte[] signature)
          驗證傳入的簽章。
 boolean verify(byte[] signature, int offset, int length)
          從指定的偏移量開始,驗證指定的 byte 陣列中傳入的簽章。
 
從類別 java.security.SignatureSpi 繼承的方法
engineGetParameter, engineGetParameters, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineSign, engineUpdate, engineUpdate, engineUpdate, engineVerify, engineVerify
 
從類別 java.lang.Object 繼承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

欄位詳細資訊

UNINITIALIZED

protected static final int UNINITIALIZED
可能的 state 值,表示尚未初始化此簽章物件。

另請參見:
常數欄位值

SIGN

protected static final int SIGN
可能的 state 值,表示此簽章物件已經初始化簽章。

另請參見:
常數欄位值

VERIFY

protected static final int VERIFY
可能的 state 值,表示此簽章物件已經初始化驗證。

另請參見:
常數欄位值

state

protected int state
此簽章物件的當前狀態。

建構子詳細資訊

Signature

protected Signature(String algorithm)
創建指定演算法的 Signature 物件。

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

getInstance

public static Signature getInstance(String algorithm)
                             throws NoSuchAlgorithmException
返回實作指定簽章演算法的 Signature 物件。

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

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

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

getInstance

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

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

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

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

getInstance

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

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

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

getProvider

public final Provider getProvider()
返回此簽章物件的提供者。

返回:
此簽章物件的提供者

initVerify

public final void initVerify(PublicKey publicKey)
                      throws InvalidKeyException
初始化此用於驗證的物件。如果使用其他參數再次調用此方法,此調用的結果將無效。

參數:
publicKey - 將驗證其簽章的標識的公鑰。
拋出:
InvalidKeyException - 如果密鑰無效。

initVerify

public final void initVerify(Certificate certificate)
                      throws InvalidKeyException
使用來自給定證書的公鑰初始化此用於驗證的物件。

如果證書是 X.509 型別且具有標記為重要的 key usage 擴展欄位,並且 key usage 擴展欄位的值暗示著證書中的公鑰及其對應的私鑰不允許用於數位簽章,則拋出 InvalidKeyException

參數:
certificate - 將驗證其簽章的標識的證書。
拋出:
InvalidKeyException - 如果證書中的公鑰未被正確解碼,或者未包括所請求的參數資訊,或者不能用於數位簽章。
從以下版本開始:
1.3

initSign

public final void initSign(PrivateKey privateKey)
                    throws InvalidKeyException
初始化這個用於簽章的物件。如果使用其他參數再次調用此方法,此調用的結果將無效。

參數:
privateKey - 將產生其簽章的標識的私鑰。
拋出:
InvalidKeyException - 如果密鑰無效。

initSign

public final void initSign(PrivateKey privateKey,
                           SecureRandom random)
                    throws InvalidKeyException
初始化這個用於簽章的物件。如果使用其他參數再次調用此方法,此調用的結果將無效。

參數:
privateKey - 將產生其簽章的標識的私鑰。
random - 此簽章的隨機源。
拋出:
InvalidKeyException - 如果密鑰無效。

sign

public final byte[] sign()
                  throws SignatureException
返回所有已更新資料的簽章位元組。簽章的格式取決於基礎簽章方案。

對此方法的調用將把此簽章物件重新設置到以前為進行簽章而通過調用 initSign(PrivateKey) 對其初始化時的狀態。也就是說,如果需要,通過重新調用 updatesign,可重新設置物件,並且可以通過它從同一個簽署者中產生其他人的簽章。

返回:
簽章操作結果的簽章位元組。
拋出:
SignatureException - 如果此簽章物件未得到正確初始化,或者此簽章演算法不能處理所提供的輸入資料。

sign

public final int sign(byte[] outbuf,
                      int offset,
                      int len)
               throws SignatureException
完成簽章操作並從 offset 開始,將得到的簽章位元組存儲在提供的緩衝區 outbuf 中。簽章的格式取決於基礎簽章方案。

此簽章物件將被重新設置到其初始狀態(對其中的一種 initSign 方法調用之後所處的狀態),並且可重新使用此簽章物件,用同一個私鑰產生將來的簽章。

參數:
outbuf - 輸出簽章結果的緩衝區。
offset - 到存儲簽章的 outbuf 的偏移量。
len - outbuf 中分派給簽章的位元組數。
返回:
放入 outbuf 中的位元組數。
拋出:
SignatureException - 如果此簽章物件未得到正確初始化,如果此簽章演算法無法處理所提供的輸入資料,或者 len 少於實際簽章長度。
從以下版本開始:
1.2

verify

public final boolean verify(byte[] signature)
                     throws SignatureException
驗證傳入的簽章。

對此方法的調用將把此簽章物件重新設置到以前為進行驗證而通過調用 initVerify(PublicKey) 對其初始化時的狀態。也就是說,該物件將被重新設置,並且可以用來驗證調用 initVerify 時其公鑰所指定的標識中的其他簽章。

參數:
signature - 要驗證的簽章位元組。
返回:
如果簽章得到驗證,則返回 true,否則將返回 false。
拋出:
SignatureException - 如果此簽章物件未得到正確初始化,傳入的簽章未得到正確解碼,或型別錯誤,如果此簽章演算法不能處理所提供的輸入資料等。

verify

public final boolean verify(byte[] signature,
                            int offset,
                            int length)
                     throws SignatureException
從指定的偏移量開始,驗證指定的 byte 陣列中傳入的簽章。

對此方法的調用將把此簽章物件重新設置到以前為進行驗證而通過調用 initVerify(PublicKey) 對其初始化時的狀態。也就是說,該物件將被重新設置,並且可以用來驗證調用 initVerify 時其公鑰所指定的標識中的其他簽章。

參數:
signature - 要驗證的簽章位元組。
offset - byte 陣列中起始處的偏移量。
length - 要使用的位元組數(從偏移量起始處算起)。
返回:
如果簽章得到驗證,則返回 true,否則將返回 false。
拋出:
SignatureException - 如果此簽章物件未得到正確初始化,傳入的簽章未得到正確解碼,或者型別錯誤,如果此簽章演算法無法處理所提供的輸入資料等。
IllegalArgumentException - 如果 signature byte 陣列為 null,或者 offsetlength 小於 0,或者 offsetlength 的和大於 signature byte 陣列的長度。
從以下版本開始:
1.4

update

public final void update(byte b)
                  throws SignatureException
更新要由位元組簽章或驗證的資料。

參數:
b - 用於更新的位元組。
拋出:
SignatureException - 如果此簽章物件未得到正確初始化。

update

public final void update(byte[] data)
                  throws SignatureException
使用指定的 byte 陣列更新要簽章或驗證的資料。

參數:
data - 用於更新的 byte 陣列。
拋出:
SignatureException - 如果此簽章物件未得到正確初始化。

update

public final void update(byte[] data,
                         int off,
                         int len)
                  throws SignatureException
從指定的偏移量開始,使用指定的 byte 陣列更新要簽章或驗證的資料。

參數:
data - byte 陣列。
off - 到 byte 陣列開始處的偏移量。
len - 要使用的位元組數,從偏移量起始處算起。
拋出:
SignatureException - 如果此簽章物件未得到正確初始化。

update

public final void update(ByteBuffer data)
                  throws SignatureException
使用指定的 ByteBuffer 更新要簽章或驗證的資料。處理從 data.position() 處開始的 data.remaining() 位元組。返回時,緩衝區的位置將等於其限制;其限制並未改變。

參數:
data - ByteBuffer
拋出:
SignatureException - 如果此簽章物件未得到正確初始化。
從以下版本開始:
1.5

getAlgorithm

public final String getAlgorithm()
返回此簽章物件的演算法名稱。

返回:
此簽章物件的演算法名稱。

toString

public String toString()
返回此簽章物件的字元串表示形式,以提供包括物件狀態和所用演算法名稱在內的資訊。

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

setParameter

@Deprecated
public final void setParameter(String param,
                                          Object value)
                        throws InvalidParameterException
已過時。 使用 setParameter 取代。

將指定的演算法參數設置為指定的值。此方法提供了一種通用機制,通過它可以設置此物件的各種參數。參數可以是演算法的任何可設置參數,如參數大小、簽章產生的隨機源位(如果適當),或者表示是否執行具體但可選的計算。每個參數都需要統一的、特定於演算法的命名方案,但此時尚未指定這種方案。

參數:
param - 參數的字元串標示符。
value - 參數值。
拋出:
InvalidParameterException - 如果 param 是此演算法引擎的無效參數,或者已經設置參數並且不能重新設置,或者出現了安全異常等等。
另請參見:
getParameter(java.lang.String)

setParameter

public final void setParameter(AlgorithmParameterSpec params)
                        throws InvalidAlgorithmParameterException
使用指定的參數集初始化此簽章引擎。

參數:
params - 參數
拋出:
InvalidAlgorithmParameterException - 如果給定的參數不適合此簽章引擎
另請參見:
getParameters()

getParameters

public final AlgorithmParameters getParameters()
返回與此簽章物件一起使用的參數。

返回的參數可能與用來初始化此簽章的參數相同;如果此簽章需要演算法參數但卻未使用任何參數進行初始化,則返回的參數可能會包含由底層簽章實作所使用的預設值和隨機產生的參數值的組合。

返回:
用於此簽章的參數,如果此簽章不使用任何參數,則返回 null。
從以下版本開始:
1.4
另請參見:
setParameter(AlgorithmParameterSpec)

getParameter

@Deprecated
public final Object getParameter(String param)
                          throws InvalidParameterException
已過時。 

獲取指定的演算法參數的值。此方法提供了一種通用機制,通過它能夠獲取此物件的各種參數。參數可以是演算法的任何可設置參數,如參數大小、簽章產生的隨機源位(如果適當),或者表示是否執行具體但可選的計算。每個參數都需要統一的、特定於演算法的命名方案,但此時尚未指定這種方案。

參數:
param - 參數的字元串名稱。
返回:
表示參數值的物件,如果沒有,則返回 null。
拋出:
InvalidParameterException - 如果 param 是此引擎的無效參數,或者嘗試獲取此參數時出現其他異常。
另請參見:
setParameter(String, Object)

clone

public Object clone()
             throws CloneNotSupportedException
如果此實作可以複製,則返回副本。

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

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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