JavaTM 2 Platform
Standard Ed. 6

java.security
類別 SignedObject

java.lang.Object
  繼承者 java.security.SignedObject
所有已實作的介面:
Serializable

public final class SignedObject
extends Object
implements Serializable

SignedObject 是一個用來創建實際運行時物件的類別,在檢測不到這些物件的情況下,其完整性不會遭受損害。

更明確地說,SignedObject 套件含另外一個 Serializable 物件,即(要)簽章的物件及其簽章。

簽章物件是對原始物件的“深層複製”(以序列化形式)。一旦產生了副本,對原始物件的進一步操作就不再影響該副本。

底層簽章演算法是由傳遞給建構子和 verify 方法的 Signature 物件指定。下面是簽章的典型用法:

 Signature signingEngine = Signature.getInstance(algorithm,
                                                 provider);
 SignedObject so = new SignedObject(myobject, signingKey,
                                    signingEngine);
 

下面是對驗證的典型用法(已接收到 SignedObject so):

 Signature verificationEngine =
     Signature.getInstance(algorithm, provider);
 if (so.verify(publickey, verificationEngine))
     try {
         Object myobj = so.getObject();
     } catch (java.lang.ClassNotFoundException e) {};
 

以下幾點需要注意。首先,不需要初始化簽章或驗證引擎,因為它將在建構子和 verify 方法中被重新初始化。其次,為了成功驗證,指定的公鑰必須是與用來產生 SignedObject 的私鑰對應的公鑰。

更為重要的是,出於靈活性考慮,建構子和 verify 方法允許使用自定義的簽章引擎,這樣可以實作未作為加密提供者一部分正常安裝的簽章演算法。不過,程式人員編寫知道使用什麼 Signature 引擎的校驗器程式碼至關重要,因為將調用它自己的 verify 方法的實作來驗證簽章。換句話說,惡意 Signature 在嘗試繞過安全檢查的驗證中會選擇始終返回 true。

在所有演算法中,簽章演算法可以是使用 DSA 和 SHA-1 的 NIST 標準 DSA。該演算法使用與簽章慣例相同的慣例來指定。例如,可以將使用 SHA-1 訊息分類別演算法的 DSA 演算法指定為 "SHA/DSA" 或 "SHA-1/DSA"(它們是等效的)。如果使用 RSA 標準,訊息分類別演算法將有多種選擇,例如,可將簽章演算法指定為 "MD2/RSA"、"MD5/RSA" 或 "SHA-1/RSA"。沒有預設的演算法名稱,所以必須為其指定名稱。

Cryptography Package Provider 的名稱也是由建構子和 verify 方法的 Signature 參數指定的。如果未指定提供者,則使用預設的提供者。每種安裝都可以配置為將特定的提供者作為預設提供者。

SignedObject 可能的應用領域包括:

另請參見:
Signature, 序列化表格

建構子摘要
SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)
          通過任何可序列化物件建構 SignedObject。
 
方法摘要
 String getAlgorithm()
          獲取簽章演算法的名稱。
 Object getObject()
          獲取已封裝的物件。
 byte[] getSignature()
          在已簽章物件上按 byte 陣列的形式獲取簽章。
 boolean verify(PublicKey verificationKey, Signature verificationEngine)
          使用指派的驗證引擎,通過給定的驗證密鑰驗證此 SignedObject 中的簽章是否為內部存儲物件的有效簽章。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

SignedObject

public SignedObject(Serializable object,
                    PrivateKey signingKey,
                    Signature signingEngine)
             throws IOException,
                    InvalidKeyException,
                    SignatureException
通過任何可序列化物件建構 SignedObject。使用指派的簽章引擎,通過給定的簽章密鑰將給定的物件簽章。

參數:
object - 要簽章的物件。
signingKey - 用於簽章的私鑰。
signingEngine - 用於簽章的簽章引擎。
拋出:
IOException - 如果在序列化期間發生錯誤
InvalidKeyException - 如果密鑰無效。
SignatureException - 如果簽章失敗。
方法詳細資訊

getObject

public Object getObject()
                 throws IOException,
                        ClassNotFoundException
獲取已封裝的物件。在返回已封裝的物件之前要先對它反序列化。

返回:
已封裝的物件。
拋出:
IOException - 如果在反序列化期間發生錯誤
ClassNotFoundException - 如果在反序列化期間發生錯誤

getSignature

public byte[] getSignature()
在已簽章物件上按 byte 陣列的形式獲取簽章。

返回:
簽章。每次調用此方法時都返回一個新的陣列。

getAlgorithm

public String getAlgorithm()
獲取簽章演算法的名稱。

返回:
簽章演算法名稱。

verify

public boolean verify(PublicKey verificationKey,
                      Signature verificationEngine)
               throws InvalidKeyException,
                      SignatureException
使用指派的驗證引擎,通過給定的驗證密鑰驗證此 SignedObject 中的簽章是否為內部存儲物件的有效簽章。

參數:
verificationKey - 用於驗證的公鑰。
verificationEngine - 簽章驗證引擎。
返回:
如果簽章有效,則返回 true,否則返回 false
拋出:
SignatureException - 如果簽章驗證失敗。
InvalidKeyException - 如果驗證密鑰無效。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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