3.2.15 Timestamp

Timestamp类用于封装有关签署时间戳的信息,且它是不可更改的。它包括时间戳的日期和时间,以及有关生成和签署时间戳的Timestamping Authority(TSA)的信息。为了区别于一般时间戳(java.sql.Timestamp),我们称它为数字时间戳。


//构建数字时间戳

public final class Timestamp

extends Object

implements Serializable


❑方法详述

构建一个数字时间戳需要提供时间和签名证书路径(CertPath)两个参数,方法如下:


//构造一个Timestamp对象。

public Timestamp(Date timestamp, CertPath signerCertPath)


获得数字时间戳后的主要目的在于校验给定对象是否与此数字时间戳一致,方法如下:


//比较指定的对象和Timestamp对象是否相同。

public boolean equals(Object obj)


当然,我们可以通过数字时间戳获得相应的签名证书路径和生成数字时间戳的日期和时间,方法如下:


//返回Timestamping Authority的证书路径。

public CertPath getSignerCertPath()

//返回生成数字时间戳时的日期和时间。

public Date getTimestamp()


此外,数字时间戳覆盖了以下两种方法:


//返回此数字时间戳的散列码值。

public int hashCode()

//返回描述此数字时间戳的字符串。

public String toString()


❑实现示例

我们可以通过代码清单3-13所示来构造一个数字时间戳。

代码清单3-13 获得数字时间戳


//构建CertificateFactory对象,并指定证书类型为X.509。

CertificateFactory cf=CertificateFactory.getInstance("X509");

//生成CertPath对象

CertPath cp=cf.generateCertPath(new FileInputStream("D:\x.cer"));

//实例化数字时间戳

Timestamp t=new Timestamp(new Date(),cp);


关于CertificateFactory类的介绍请参见3.5.1节。