|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
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 可用来构造签名的逻辑序列,以模拟一系列授权和委托。
构造方法摘要 | |
---|---|
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
- 如果验证密钥无效。
所有类
|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |