public final class SignedObject extends Object implements Serializable
signedobject是一个创造真实的运行时对象的完整性不会受到影响而不被发现的目的类。
更具体地说,一个signedobject包含另一个可序列化的对象,这(是)签署的对象及其特征。
签名的对象是一个“深拷贝”(连载)一个原始对象。一旦复制,进一步的操作的原始对象没有任何副作用的副本。
底层的签名算法是通过构造函数和verify
方法的签名对象指定。签署的一个典型用途是以下:
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,验证在试图绕过安全检查。
签名算法即可,其中,NIST标准DSA,DSA和SHA-1。该算法被指定使用相同的约定,为签名。采用SHA-1信息摘要算法DSA算法可以指定,例如,“沙/ DSA”或“SHA-1或DSA”(它们是等价的)。在RSA的情况下,有多种选择的消息摘要算法,所以签名算法可以被指定为,例如,“MD2和RSA”、“MD5和RSA”或“SHA-1 / RSA”。必须指定该算法名称,因为没有默认值。
的密码术包商名称指定的签名参数的构造函数和verify
方法。如果没有指定提供程序,则使用默认的提供程序。每个安装都可以被配置为使用特定的提供程序作为默认。
signedobject的潜在应用包括:
Signature
,
Serialized Form
Constructor and Description |
---|
SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)
任何可序列化的对象构造一个signedobject。
|
Modifier and Type | Method and Description |
---|---|
String |
getAlgorithm()
检索签名算法的名称。
|
Object |
getObject()
检索封装的对象。
|
byte[] |
getSignature()
在一个字节数组的形式中检索已签名的对象上的签名。
|
boolean |
verify(PublicKey verificationKey, Signature verificationEngine)
在这signedobject验证签名的对象存储在有效的签名,与给定的验证密钥,使用指定的验证引擎。
|
public SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine) throws IOException, InvalidKeyException, SignatureException
object
-要签名的对象。
signingKey
-用于签名的私钥。
signingEngine
-签名签名引擎。
IOException
-如果在序列化期间发生错误
InvalidKeyException
如果密钥无效。
SignatureException
如果签约失败。
public Object getObject() throws IOException, ClassNotFoundException
IOException
-如果在反序列化时发生错误
ClassNotFoundException
-如果在反序列化时发生错误
public byte[] getSignature()
public String getAlgorithm()
public boolean verify(PublicKey verificationKey, Signature verificationEngine) throws InvalidKeyException, SignatureException
verificationKey
-验证公钥。
verificationEngine
-签名验证引擎。
true
如果签名是有效的,
false
否则
SignatureException
如果签名验证失败。
InvalidKeyException
-如果验证密钥无效。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.