gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:23:20 32 4
gpt4 key购买 nike

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

为此,我想用公钥解密消息的签名值(签名摘要),该公钥属于首先签署摘要的私钥。

我有以下元素:

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

  • 我有点不知道如何使用 openssl 来实现这一点。

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

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

    然后我使用命令:
    openssl rsautl -inkey pubkey.pem -pubin -in sigfile_octet
    这会给我八位字节的解密签名值吗?
    我需要执行哪些后续步骤才能将其与 base64 摘要进行比较?

    p.s.我已经使用 Aleksey's XML security library 验证了签名,所以我知道摘要应该与解密的签名值匹配。

    非常感谢您的帮助!

    亲切的问候,

    迪德里克

    最佳答案

    使用 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 打印此结构的人类可读 View ,您可以添加 -asn1parse rsautl 的选项命令。看起来像这样:

    0:d=0 hl=2 l= 49 缺点:序列
    2:d=1 hl=2 l= 13 缺点:序列
    4:d=2 hl=2 l= 9 prim: 对象:sha256
    15:d=2 hl=2 l= 0 prim: NULL
    17:d=1 hl=2 l= 32 prim: 八位字节串
    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命令,它使您能够从结构中提取元素。

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

    关于encryption - 在命令行中使用 openssl 使用公钥解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35583740/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com