文档

Java™ 教程
隐藏目录
对数据进行签名
教程: Java SE中的安全特性
课程: 生成和验证签名
章节: 生成数字签名

对数据进行签名

现在您已经创建了公钥和私钥,可以准备对数据进行签名。在此示例中,您将对文件中包含的数据进行签名。 GenSig从命令行获取文件名。可以使用Signature类的实例来创建(或验证)数字签名。

签名数据,为该数据生成数字签名,需要执行以下步骤。

获取Signature对象:以下代码获取用于使用DSA算法生成或验证签名的Signature对象,该算法与程序在上一步中生成密钥时使用的算法相同,参见生成公钥和私钥

Signature dsa = Signature.getInstance("SHA1withDSA", "SUN"); 

注意:在指定签名算法名称时,还应包括签名算法所使用的消息摘要算法的名称。SHA1withDSA是一种指定DSA签名算法的方式,使用SHA-1消息摘要算法。

初始化Signature对象

在可以对Signature对象进行签名或验证之前,必须对其进行初始化。签名的初始化方法需要一个私钥。使用上一步中命名为privPrivateKey对象中放置的私钥。

dsa.initSign(priv);

为Signature对象提供要签名的数据 该程序将使用作为第一个(也是唯一一个)命令行参数指定的文件的数据。程序将一次读取一个缓冲区的数据,并通过调用update方法将其提供给Signature对象。

FileInputStream fis = new FileInputStream(args[0]);
BufferedInputStream bufin = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int len;
while ((len = bufin.read(buffer)) >= 0) {
    dsa.update(buffer, 0, len);
};
bufin.close();

生成签名

一旦所有数据都已提供给Signature对象,就可以生成该数据的数字签名。

byte[] realSig = dsa.sign();

上一页: 生成公钥和私钥
下一页: 将签名和公钥保存到文件中