签署数据

原文: https://docs.oracle.com/javase/tutorial/security/apisign/step3.html

现在您已经创建了公钥和私钥,您已准备好对数据进行签名。在此示例中,您将签署文件中包含的数据。 GenSig从命令行获取文件名。使用Signature类的实例创建(或验证)数字签名。

通过以下步骤对为该数据生成数字签名的数据进行签名。

获取签名对象:以下内容获取Signature对象,用于使用 DSA 算法生成或验证签名,该算法与上一步骤中程序生成密钥的算法相同,生成公共和私有键

  1. Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");

注意:指定签名算法名称时,还应包括签名算法使用的消息摘要算法的名称。 SHA1withDSA 是一种使用 SHA-1 消息摘要算法指定 DSA 签名算法的方法。

初始化签名对象

Signature对象可用于签名或验证之前,必须对其进行初始化。用于签名的初始化方法需要私钥。使用上一步中名为privPrivateKey对象中的私钥。

  1. dsa.initSign(priv);

为要签名的数据提供签名对象该程序将使用文件中的数据,该文件的名称被指定为第一个(也是唯一的)命令行参数。程序将一次读入数据缓冲区,并通过调用update方法将其提供给Signature对象。

  1. FileInputStream fis = new FileInputStream(args[0]);
  2. BufferedInputStream bufin = new BufferedInputStream(fis);
  3. byte[] buffer = new byte[1024];
  4. int len;
  5. while ((len = bufin.read(buffer)) >= 0) {
  6. dsa.update(buffer, 0, len);
  7. };
  8. bufin.close();

生成签名

将所有数据提供给Signature对象后,即可生成该数据的数字签名。

  1. byte[] realSig = dsa.sign();