文档

Java™ 教程
隐藏目录
验证签名
路径: Java SE中的安全特性
课程: 生成和验证签名
部分: 验证数字签名

验证签名

您已经将代码添加到VerSig程序中,以

您现在可以继续进行验证。

初始化用于验证的签名对象

与签名生成一样,签名是通过使用Signature类的实例来验证的。您需要创建一个使用与生成签名相同的签名算法的Signature对象。在GenSig程序中使用的算法是来自SUN提供者的SHA1withDSA算法。

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

接下来,您需要初始化Signature对象。验证的初始化方法需要公钥。

sig.initVerify(pubKey);

为签名对象提供要验证的数据 现在,您需要为Signature对象提供生成签名的数据。这些数据位于指定为第三个命令行参数的文件中。与签名时一样,一次读入一个缓冲区的数据,并通过调用update方法将其提供给Signature对象。

FileInputStream datafis = new FileInputStream(args[2]);
BufferedInputStream bufin = new BufferedInputStream(datafis);

byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) {
    len = bufin.read(buffer);
    sig.update(buffer, 0, len);
};

bufin.close();

验证签名

一旦您向Signature对象提供了所有数据,您可以验证该数据的数字签名并报告结果。请记住,所谓的签名被读入一个名为sigToVerify的字节数组中。

boolean verifies = sig.verify(sigToVerify);

System.out.println("signature verifies: " + verifies);

如果所谓的签名(sigToVerify)是由与公钥pubKey对应的私钥生成的指定数据文件的实际签名,则verifies值将为true


上一页:输入签名字节
下一页:编译并运行程序