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的潜在应用包括:
也可以看看:
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
|
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. |
String getAlgorithm ()
检索签名算法的名称。
Returns | |
---|---|
String |
the signature algorithm name. |
Object getObject ()
检索封装的对象。 被封装的对象在被返回之前被反序列化。
Returns | |
---|---|
Object |
the encapsulated object. |
Throws | |
---|---|
IOException |
if an error occurs during de-serialization |
ClassNotFoundException |
if an error occurs during de-serialization |
byte[] getSignature ()
以字节数组的形式检索签名对象上的签名。
Returns | |
---|---|
byte[] |
the signature. Returns a new array each time this method is called. |
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. |