所以我面临的问题是我向服务器发出请求,而服务器正在通过webhooks进行响应 - >此通知可能需要一段时间才能回来。这就是为什么每次收到响应时,我都需要验证响应身份验证标头中发送的签名。
他们说他们制作签名: sign(apikey + nonce + timestamp + transactionid)
现在,显然我有apikey,但我没有时间戳,nonce和transactionId来验证签名是否正确。我不明白,它甚至可以解决吗?
无论如何,他们说他们使用SHA256withRSA(OID:1.2.840.113549.1.1.11)标准来签名,因此我必须使用相同的东西来解密它。他们给了我他们的字符串公钥,没有别的(没有证书)。公钥的格式为:
-----BEGIN PUBLIC KEY-----
<public key>
-----END PUBLIC KEY-----
我还没有在C#中找到任何开箱即用的解决方案来解决这个问题,因为我不能只使用RSA。我该怎么做才能解密他们的签名并确认它真的是他们?
答案 0 :(得分:3)
数据应包含您要查找的工件。签名不会加密数据,而是通常附加(通常附加)到数据。虽然数据未加密(通过签名生成过程),但它当然可以是编码,这意味着您可能必须首先解码数据(例如,基数64)。然后签名通过数据的规范二进制表示。
一般来说,要验证签名:
"SHA256withRSA"
),最后是除了验证签名之外,您还可能需要执行签名的验证。通常,签名验证包括以下内容:
但如果可能的话,你应该让图书馆来处理这件事。但请检查验证是否确实发生,验证检查是否有用以及是否已执行验证。
如果使用PEM(就像您显示的公钥一样),可能是使用CMS(加密消息语法)隐藏数据和签名。这是二进制容器格式。如果这是真的那么你肯定需要一个CMS库,因为解析消息结构需要大量的知识和实践。