签名数据
现在,您已经创建了公共密钥和私有密钥,您可以对数据进行签名了。在此示例中,您将对文件中包含的数据进行签名。 GenSig
从命令行获取文件名。使用Signature
类的实例创建(或验证)数字签名。
签名数据并为该数据生成数字签名是通过以下步骤完成的。
获取签名对象 :以下代码获取一个Signature
对象,用于使用 DSA 算法生成或验证签名,该算法与程序在上一步中生成密钥的方法生成公钥和私钥相同。
Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
注意:指定签名算法名称时,还应包括签名算法使用的消息摘要算法的名称。 SHA1withDSA 是一种使用 SHA-1 消息摘要算法指定 DSA 签名算法的方法。
初始化签名对象
Signature
对象可用于签名或验证之前,必须对其进行初始化。用于签名的初始化方法需要私钥。使用上一步中放置在名为priv
的PrivateKey
对象中的私钥。
dsa.initSign(priv);
为签名对象提供要签名的数据 该程序将使用文件名中的数据,该文件的名称被指定为第一个(也是唯一的)命令行参数。该程序将一次读取数据缓冲区,并通过调用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();