java签名和签名数据

时间:2011-12-13 08:13:17

标签: java signature

签名和签名数据有什么区别?我需要将它们传递给另一方。

我有代码:

private static byte[] sign(byte[] data) {
    byte[] signedData = null;

    try {
        java.security.KeyStore keyStoreFile = java.security.KeyStore.getInstance("PKCS12");
        keyStoreFile.load(new FileInputStream("keyStore.pfx"),
                "password".toCharArray());

        PrivateKey privateKey = (PrivateKey) keyStoreFile.getKey(
                "alias", "password".toCharArray());

        Signature dsa = Signature.getInstance("SHA1withRSA");
        dsa.initSign(privateKey);
        dsa.update(data);
        signedData = dsa.sign();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return signedData;
}

signedData签名或签名数据也是如此?我需要生成并发布它们,但我不明白其中的区别。请指教。感谢。

2 个答案:

答案 0 :(得分:0)

来自Signature.sign的javadoc:

  

返回更新的所有数据的签名字节。签名的格式取决于底层签名方案。

所以这绝对不是签名数据,而只是使用update方法提供的数据的签名。

答案 1 :(得分:0)

在您的示例中,data是原始数据,您要签名的内容。 signedData是签名数据。如果您使用相同的私钥并使用相同的data,那么您将始终获得相同的signedData

datasignedData捆绑在一起后,我认为您可以将生成的捆绑包称为“签名数据”。原始数据是您想要提供的数据,签名数据是您或其他任何人可以确认原始数据未被更改的方式。换句话说,为了使用原始数据,您只需要原始数据;为了验证数据是否未更改,您需要原始数据,签名数据和公钥。 (公钥必须与用于生成签名数据的私钥匹配。)

为了验证操作成功,验证软件需要具有与原始签名操作完全相同的输入作为输入。因此,无论您将原始数据和签名数据捆绑在一起,都需要注意不要添加或删除数据的任何部分。

您可以将原始数据放在文件中,将签名数据放在另一个文件中,然后制作zip存档或任何其他类型的存档。您可以对两者进行Base64编码,并将它们放在带分隔符的文本文件中。随你。但是数据的最终用户需要原始数据,签名数据和公钥来验证原始数据是否正确。