Most visited

Recently visited

Added in API level 1

SignedObject

public final class SignedObject
extends Object implements Serializable

java.lang.Object
   ↳ java.security.SignedObject


SignedObject是一个类,用于创建真正的运行时对象,其完整性如果未被检测到就不会受到威胁。

更具体地说,SignedObject包含另一个Serializable对象,(待被)签名对象及其签名。

签名对象是原始对象的“深层复制”(以序列化形式)。 一旦复制完成,原始对象的进一步操作对副本没有副作用。

底层签名算法由传递给构造函数的Signature对象和方法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以尝试绕过安全检查。

签名算法可以是使用DSA和SHA-1的NIST标准DSA。 该算法使用与签名相同的约定来指定。 例如,可以将使用SHA-1消息摘要算法的DSA算法指定为“SHA / DSA”或“SHA-1 / DSA”(它们是等价的)。 在RSA的情况下,消息摘要算法有多种选择,因此可以将签名算法指定为例如“MD2 / RSA”,“MD5 / RSA”或“SHA-1 / RSA”。 算法名称必须指定,因为没有默认值。

加密包提供程序的名称也由构造函数的Signature参数和verify方法指定。 如果未指定提供者,则使用默认提供者。 每个安装都可以配置为默认使用特定的提供程序。

SignedObject的潜在应用包括:

也可以看看:

Summary

Public constructors

SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)

从任何Serializable对象构造一个SignedObject。

Public methods

String getAlgorithm()

检索签名算法的名称。

Object getObject()

检索封装的对象。

byte[] getSignature()

以字节数组的形式检索签名对象上的签名。

boolean verify(PublicKey verificationKey, Signature verificationEngine)

使用指定的验证引擎验证此SignedObject中的签名是使用给定的验证密钥存储在内部的对象的有效签名。

Inherited methods

From class java.lang.Object

Public constructors

SignedObject

Added in API level 1
SignedObject (Serializable object, 
                PrivateKey signingKey, 
                Signature signingEngine)

从任何Serializable对象构造一个SignedObject。 给定的对象使用指定的签名引擎使用给定的签名密钥进行签名。

Parameters
object Serializable: the object to be signed.
signingKey PrivateKey: the private key for signing.
signingEngine Signature: the signature signing engine.
Throws
IOException if an error occurs during serialization
InvalidKeyException if the key is invalid.
SignatureException if signing fails.

Public methods

getAlgorithm

Added in API level 1
String getAlgorithm ()

检索签名算法的名称。

Returns
String the signature algorithm name.

getObject

Added in API level 1
Object getObject ()

检索封装的对象。 被封装的对象在被返回之前被反序列化。

Returns
Object the encapsulated object.
Throws
IOException if an error occurs during de-serialization
ClassNotFoundException if an error occurs during de-serialization

getSignature

Added in API level 1
byte[] getSignature ()

以字节数组的形式检索签名对象上的签名。

Returns
byte[] the signature. Returns a new array each time this method is called.

verify

Added in API level 1
boolean verify (PublicKey verificationKey, 
                Signature verificationEngine)

使用指定的验证引擎验证此SignedObject中的签名是使用给定的验证密钥存储在内部的对象的有效签名。

Parameters
verificationKey PublicKey: the public key for verification.
verificationEngine Signature: the signature verification engine.
Returns
boolean true if the signature is valid, false otherwise
Throws
SignatureException if signature verification failed.
InvalidKeyException if the verification key is invalid.

Hooray!