Encryption 在命令行中使用openssl使用公钥解密

Encryption 在命令行中使用openssl使用公钥解密,encryption,command-line,openssl,digital-signature,public-key,Encryption,Command Line,Openssl,Digital Signature,Public Key,我想“手动”将消息的摘要/哈希与此摘要上解密的签名值进行比较 为此,我想用公钥对消息的签名值(签名摘要)进行解密,该公钥属于最初签名摘要时使用的私钥 我有以下项目: 消息的base64中的摘要值(使用SHA256计算) base64中摘要上已使用私有签名的签名值 密钥(使用带RSA加密的SHA256) 属于私钥的.pem格式的公钥 我有实际的消息(它是XML格式的,包含文档不同部分的多个签名)。我已经使用XML安全库验证了签名。我只对用公钥解密签名值感兴趣 我有点被困在如何使用openssl

我想“手动”将消息的摘要/哈希与此摘要上解密的签名值进行比较

为此,我想用公钥对消息的签名值(签名摘要)进行解密,该公钥属于最初签名摘要时使用的私钥

我有以下项目:

  • 消息的base64中的摘要值(使用SHA256计算)
  • base64中摘要上已使用私有签名的签名值 密钥(使用带RSA加密的SHA256)
  • 属于私钥的.pem格式的公钥
  • 我有实际的消息(它是XML格式的,包含文档不同部分的多个签名)。我已经使用XML安全库验证了签名。我只对用公钥解密签名值感兴趣
我有点被困在如何使用openssl实现这一点上

我正在尝试所描述的命令的变体,但是我有点迷路了

我想我应该使用以下方法将签名从base64值转换为八位字节:

base64--d sigfile>sigfile\u八位字节

然后我使用命令:

openssl rsautl-inkey pubkey.pem-pubin-in-sigfile\u octet

这会给我解密后的八进制签名值吗? 要将其与base64摘要进行比较,接下来需要执行哪些步骤

p、 我已经使用验证了签名,所以我知道摘要应该与解密的签名值匹配

非常感谢你的帮助

亲切问候,


Diederik

使用
dgst
命令,而不是
rsautl

openssl dgst -verify pubkey.pem -signature sigfile_octet message.txt
这里,
message.txt
是您试图验证的消息


您可以使用
rsautl
对签名进行“解密”,从而访问原始验证数据:

openssl rsautl -verify -inkey pubkey.pem -pubin -in sigfile_octet
这将产生签名的DER编码ASN.1结构。这是一个包含所用哈希算法的算法标识符的序列,后跟哈希本身。如果希望OpenSSL打印此结构的可读视图,可以将
-asn1parse
选项添加到
rsautl
命令中。看起来是这样的:

0:d=0 hl=2 l= 49 cons: SEQUENCE 2:d=1 hl=2 l= 13 cons: SEQUENCE 4:d=2 hl=2 l= 9 prim: OBJECT :sha256 15:d=2 hl=2 l= 0 prim: NULL 17:d=1 hl=2 l= 32 prim: OCTET STRING 0000 - c9 8c 24 b6 77 ef f4 48-60 af ea 6f 49 3b ba ec ..$.w..H`..oI;.. 0010 - 5b b1 c4 cb b2 09 c6 fc-2b bb 47 f6 6f f2 ad 31 [.......+.G.o..1 0:d=0 hl=2 l=49 cons:序列 2:d=1 hl=2 l=13 cons:序列 4:d=2 hl=2 l=9原始:对象:sha256 15:d=2 hl=2 l=0初始值:空 17:d=1 hl=2 l=32原始:八位字节字符串 0000-c9 8c 24 b6 77 ef f4 48-60 af ea 6f 49 3b ba ec.$.w.H`…oI;。。 0010-5b b1 c4 cb b2 09 c6 fc-2b bb 47 f6 6f f2 ad 31[….+.G.o..1 如果只想提取散列,而不是使用
-asn1parse
选项,则可以将其通过管道传输到
asn1parse
命令,该命令使您能够从结构中提取元素


当你说你有“摘要上的签名值”,我假设您拥有的是具有此结构的真实签名,而不仅仅是使用私钥签名的原始散列。如果不是这样,您可以发布一些示例输出。

我不清楚消息是否实际可用,但问题中没有这样说。Diederik,您能指出是否是这样吗(请回答问题).Hi erickson,谢谢你的回复,但是我不想寻找关于签名有效性的正确/错误答案。我可以从dgst命令获得更多信息吗?我实际上想查看签名值的解密值。@MaartenBodewes,是的,我有实际的消息,但是我已经能够验证signatures(它在消息的不同部分上有多个签名)。@Diederik“消息”也是一个用于输入摘要/签名算法的技术术语。如何解析特定(XML)消息取决于您自己。但是,好的,您指定要执行RSA解密(或者,实际上,只需使用公钥进行模幂运算和PKCS#1解加法)。对。@MaartenBodewes Ok感谢您的精心设计。经过几个步骤后,我可以成功地手动计算原始xml消息的摘要(“使用openssl dgst-sha256消息”)。但是,是的!我实际上在寻找教科书RSA解密:)@迪德里克,请检查我的更新,让我知道,如果它解决了你的问题。