签名数据

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

签名数据并为该数据生成数字签名是通过以下步骤完成的。

获取签名对象 :以下代码获取一个Signature对象,用于使用 DSA 算法生成或验证签名,该算法与程序在上一步中生成密钥的方法生成公钥和私钥相同。

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

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

初始化签名对象

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

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();
首页