验证签名
您已将代码添加到VerSig
程序中
-
Importing 编码的密钥字节并将其转换为名为
PublicKey
的PublicKey
-
将签名字节 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
。