签名和签名数据有什么区别?我需要将它们传递给另一方。
我有代码:
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
签名或签名数据也是如此?我需要生成并发布它们,但我不明白其中的区别。请指教。感谢。
答案 0 :(得分:0)
来自Signature.sign的javadoc:
返回更新的所有数据的签名字节。签名的格式取决于底层签名方案。
所以这绝对不是签名数据,而只是使用update
方法提供的数据的签名。
答案 1 :(得分:0)
在您的示例中,data
是原始数据,您要签名的内容。 signedData
是签名数据。如果您使用相同的私钥并使用相同的data
,那么您将始终获得相同的signedData
。
将data
和signedData
捆绑在一起后,我认为您可以将生成的捆绑包称为“签名数据”。原始数据是您想要提供的数据,签名数据是您或其他任何人可以确认原始数据未被更改的方式。换句话说,为了使用原始数据,您只需要原始数据;为了验证数据是否未更改,您需要原始数据,签名数据和公钥。 (公钥必须与用于生成签名数据的私钥匹配。)
为了验证操作成功,验证软件需要具有与原始签名操作完全相同的输入作为输入。因此,无论您将原始数据和签名数据捆绑在一起,都需要注意不要添加或删除数据的任何部分。
您可以将原始数据放在文件中,将签名数据放在另一个文件中,然后制作zip存档或任何其他类型的存档。您可以对两者进行Base64编码,并将它们放在带分隔符的文本文件中。随你。但是数据的最终用户需要原始数据,签名数据和公钥来验证原始数据是否正确。