# 签署数据

> 原文： [https://docs.oracle.com/javase/tutorial/security/apisign/step3.html](https://docs.oracle.com/javase/tutorial/security/apisign/step3.html)

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

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

**获取签名对象**：以下内容获取`Signature`对象，用于使用 DSA 算法生成或验证签名，该算法与上一步骤中程序生成密钥的算法相同，[生成公共和私有键](step2.html)。

```
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();

```