Cryptography 生成由私钥签名的数据
我有用私钥签名的数据。现在我如何获得签名的初始数据?我使用Bouncy Castle查看了许多示例,但它们主要用于验证某些数据是否由正确的私钥签名Cryptography 生成由私钥签名的数据,cryptography,java,digital-signature,Cryptography,Java,Digital Signature,我有用私钥签名的数据。现在我如何获得签名的初始数据?我使用Bouncy Castle查看了许多示例,但它们主要用于验证某些数据是否由正确的私钥签名 CMSSignedData s = new CMSSignedData(new CMSProcessableByteArray(toverify.getBytes()),contents); SignerInformationStore signers = s.getSignerInfos(); SignerInformation signerInf
CMSSignedData s = new CMSSignedData(new CMSProcessableByteArray(toverify.getBytes()),contents);
SignerInformationStore signers = s.getSignerInfos();
SignerInformation signerInfo = (SignerInformation)signers.getSigners().iterator().next();
boolean result = signerInfo.verify(new JcaSimpleSignerInfoVerifierBuilder().setProvider("BC").build(cert.getPublicKey()));
CMSSignedData对象采用两个参数:-
1.toverify-这是已签名的示例字符串
2.内容-这是获得的签名数据
问题是我身上只有“内容”。我必须生成“toverify”部分来验证签名
如何生成“toverify”字符串?您无法从签名中恢复数据。签名是一小段数据,对于给定的签名方案、密钥和表示,签名的大小总是相同的。如果您有签名和公钥,则可以验证签名是否由相应的私钥生成,但仅此信息很少有用。通常,验证签名的目的是验证某些数据是否真实。你需要有你正在验证的数据 我必须生成“toverify”部分来验证签名
不,你没有。您应该已经将其与签名以及公钥一起提供。否则整个过程毫无意义。如果没有签名的数据,签名就没有意义。在任何情况下,都无法从签名中恢复数据。这不是加密。只有一种方法可以做到这一点,我将解释如何:
RSA有一个标准(或者更好),可以提供(部分)消息恢复。然而,出于安全考虑,该标准ISO 9796第1部分被撤销。现在,如果您想要低开销的签名,最好使用ECC签名。您所问的问题本质上与“如何从哈希中获取原始数据”相同。签名仅用于验证内容(即使您的代码也表明了这一点)。@deed02392不太确定;我不是专家,但是。。。从表面上看,我希望“签名数据”(内容)同时具有原件和签名。如果我的假设是正确的,那么这个问题是关于如何解析“签名数据”。