java signed_java11教程--类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-256的NIST标准DSA。 使用与签名相同的约定来指定算法。 可以将使用SHA-256消息摘要算法的DSA算法指定为例如“SHA256withDSA”。 在RSA的情况下,签名算法可以被指定为例如“SHA256withRSA”。 必须指定算法名称,因为没有默认值。

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

SignedObject的潜在应用包括:

它可以在内部用于任何Java运行时作为不可伪造的授权令牌 - 可以传递的令牌,而不必担心令牌可以被恶意修改而不被检测到。

它可用于对数据/对象进行签名和序列化以便在Java运行时之外进行存储(例如,将关键访问控制数据存储在磁盘上)。

嵌套的SignedObjects可用于构造签名的逻辑序列,类似于授权和委托链。

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

检索签名算法的名称。

检索封装的对象。

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

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

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

使用指定的签名引擎使用给定的签名密钥对给定对象进行签名。

检索封装的对象。

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

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

检索签名算法的名称。

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

构造方法

构造器

描述

从任何Serializable对象构造一个SignedObject。变量和类型

方法

描述

byte[]

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

boolean

PublicKey verificationKey, Signature verificationEngine)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值