验证签名

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

  • Importing 编码的密钥字节并将其转换为名为PublicKeyPublicKey

  • 将签名字节 Importing 到名为sigToVerify的字节数组中

现在,您可以 continue 进行验证。

初始化签名对象以进行验证

与签名生成一样,通过使用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