签署数据
原文: https://docs.oracle.com/javase/tutorial/security/apisign/step3.html
现在您已经创建了公钥和私钥,您已准备好对数据进行签名。在此示例中,您将签署文件中包含的数据。 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();