【发布时间】:2018-09-02 01:26:40
【问题描述】:
所以我面临的问题是我正在向服务器发出请求,而服务器正在通过 webhook 响应 -> 此通知可能需要一段时间才能返回。这就是为什么每次收到响应时,我都需要验证响应身份验证头中发送的签名。
他们说他们使用以下方式生成签名: 签名(apikey + nonce + 时间戳 + transactionid)
现在,显然我有 apikey,但我没有时间戳、nonce 和 transactionId 来验证签名是否正确。不明白,那还能解决吗?
无论如何,他们说他们使用 SHA256withRSA (OID: 1.2.840.113549.1.1.11) 标准对其进行签名,因此我必须使用相同的东西来解密它。他们给了我他们的字符串公钥,没有别的(没有证书)。公钥格式为:
-----BEGIN PUBLIC KEY-----
<public key>
-----END PUBLIC KEY-----
我没有在 C# 中找到任何现成的解决方案来解决这个问题,因为我不能只使用 RSA。我可以做些什么来解密他们的签名并验证它真的是他们?
【问题讨论】:
-
SHA 表示安全 Hash 算法。哈希算法并不意味着要以两种方式完成
-
Nonce、transactionid 和时间戳应该在您收到签名的同一响应中
-
公钥采用 ASN.1 PEM 格式,编码
SubjectPublicKeyInfo结构(也可在 X.509 证书中找到)。它也是默认格式,例如打开ssl。 Bouncy Castle 可以解析它。 -
如果您的问题只是“我如何读取密钥?” stackoverflow.com/q/41808094/6535399 应该有帮助。
标签: c# cryptography rsa sha256 rsa-sha256