java.applet

java.awt

java.awt.color

java.awt.datatransfer

java.awt.dnd

java.awt.event

java.awt.font

java.awt.geom

java.awt.im

java.awt.im.spi

java.awt.image

java.awt.image.renderable

java.awt.print

java.beans

java.beans.beancontext

java.io

java.lang

java.lang.annotation

java.lang.instrument

java.lang.management

java.lang.ref

java.lang.reflect

java.math

java.net

java.nio

java.nio.channels

java.nio.channels.spi

java.nio.charset

java.nio.charset.spi

java.rmi

java.rmi.activation

java.rmi.dgc

java.rmi.registry

java.rmi.server

java.security

java.security.acl

java.security.cert

java.security.interfaces

java.security.spec

java.sql

java.text

java.util

java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

javax.accessibility

javax.activity

javax.crypto

javax.crypto.interfaces

javax.crypto.spec

javax.imageio

javax.imageio.event

javax.imageio.metadata

javax.imageio.plugins.bmp

javax.imageio.plugins.jpeg

javax.imageio.spi

javax.imageio.stream

javax.management

javax.management.loading

javax.management.modelmbean

javax.management.monitor

javax.management.openmbean

javax.management.relation

javax.management.remote

javax.management.remote.rmi

javax.management.timer

javax.naming

javax.naming.directory

javax.naming.event

javax.naming.ldap

javax.naming.spi

javax.net

javax.net.ssl

javax.print

javax.print.attribute

javax.print.attribute.standard

javax.print.event

javax.rmi

javax.rmi.CORBA

javax.rmi.ssl

javax.security.auth

javax.security.auth.callback

javax.security.auth.kerberos

javax.security.auth.login

javax.security.auth.spi

javax.security.auth.x500

javax.security.cert

javax.security.sasl

javax.sound.midi

javax.sound.midi.spi

javax.sound.sampled

javax.sound.sampled.spi

javax.sql

javax.sql.rowset

javax.sql.rowset.serial

javax.sql.rowset.spi

javax.swing

javax.swing.border

javax.swing.colorchooser

javax.swing.event

javax.swing.filechooser

javax.swing.plaf

javax.swing.plaf.basic

javax.swing.plaf.metal

javax.swing.plaf.multi

javax.swing.plaf.synth

javax.swing.table

javax.swing.text

javax.swing.text

javax.swing.text.parser

javax.swing.text.rtf

javax.swing.tree

javax.swing.undo

javax.transaction

javax.transaction.xa

javax.xml

javax.xml.datatype

javax.xml.namespace

javax.xml.parsers

javax.xml.transform

javax.xml.transform.dom

javax.xml.transform.sax

javax.xml.transform.stream

javax.xml.validation

javax.xml.xpath

org.ietf.jgss

org.omg.CORBA

org.omg.CORBA_2_3

org.omg.CORBA_2_3.portable

org.omg.CORBA.DynAnyPackage

org.omg.CORBA.ORBPackage

org.omg.CORBA.portable

org.omg.CORBA.TypeCodePackage

org.omg.CosNaming

org.omg.CosNaming.NamingContextExtPackage

org.omg.CosNaming.NamingContextPackage

org.omg.Dynamic

org.omg.DynamicAny

org.omg.DynamicAny.DynAnyFactoryPackage

org.omg.DynamicAny.DynAnyPackage

org.omg.IOP

org.omg.IOP.CodecFactoryPackage

org.omg.IOP.CodecPackage

org.omg.Messaging

org.omg.PortableInterceptor

org.omg.PortableInterceptor.ORBInitInfoPackage

org.omg.PortableServer

org.omg.PortableServer.CurrentPackage

org.omg.PortableServer.POAManagerPackage

org.omg.PortableServer.POAPackage

org.omg.PortableServer.portable

org.omg.PortableServer.ServantLocatorPackage

org.omg.SendingContext

org.omg.stub.java.rmi

org.w3c.dom

org.w3c.dom.bootstrap

org.w3c.dom.events

org.w3c.dom.ls

org.xml.sax

org.xml.sax.ext

org.xml.sax.helpers

allclasses-frame

allclasses-noframe

constant-values

deprecated-list

help-doc

JavaTM 2 Platform
Standard Ed. 5.0

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 可能的应用领域包括:

  • 可将它内部用作任何 Java 运行时的不可遗忘的授权标记 -- 这种标记可以到处传递而不必担心其被恶意修改而又检测不到。
  • 可使用它来为 Java 运行时之外(例如,磁盘上存储的关键访问控制数据)的存储签名和序列化数据/对象。
  • 嵌套的 SignedObject 可用来构造签名的逻辑序列,以模拟一系列授权和委托。

另请参见:
Signature, 序列化表格

构造方法摘要
SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)
          通过任何可序列化对象构造 SignedObject。
 
方法摘要
 String getAlgorithm()
          检索签名算法的名称。
 Object getObject()
          检索已封装的对象。
 byte[] getSignature()
          在已签名对象上按字节数组的形式检索签名。
 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()
在已签名对象上按字节数组的形式检索签名。

返回:
签名。每次调用此方法时都返回一个新的数组。

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. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策