Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cryptography 生成由私钥签名的数据_Cryptography_Java_Digital Signature - Fatal编程技术网

Cryptography 生成由私钥签名的数据

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

我有用私钥签名的数据。现在我如何获得签名的初始数据?我使用Bouncy Castle查看了许多示例,但它们主要用于验证某些数据是否由正确的私钥签名

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不太确定;我不是专家,但是。。。从表面上看,我希望“签名数据”(内容)同时具有原件和签名。如果我的假设是正确的,那么这个问题是关于如何解析“签名数据”。