php - 在 XML 中使用 HMAC-SHA1 生成 SignatureValue

签名方式为HMAC-SHA1 , 我已经有了 <SignedInfo>产生。问题是我不确定在 HMAC 计算中使用什么作为 key 。

我注意到有两个 <Entropy>附上 <BinarySecret>来自初始请求 (RST) 和响应 (RSTR)。我从 WS-Trust 了解到,这表明我可以使用 <BinarySecret> 中的这两个二进制值生成证明 key 。和 PSHA1<ComputeKey> 中所述来自响应的标记。但是,我永远无法从服务提供商处获得与示例中相同的签名值。

任何信息都会有所帮助!

举个例子:

  • 来自 RST 的二进制 secret 是 grrlUUfhuNwlvQzQ4bV6TT3wA8ieZPltIf4+H7nIvCE=
  • 来自 RSTR 的二进制 secret 是 YLABh3ZmZyiO5gvVLZe9J4JPd9w59KGeTFwE85XlzxE=
  • 正确的签名值是 nXJEN8p1nupMA/00TK03VZlADkU=
  • 我生成的签名值是 bEGpeRFsznafFRf86g281zKV3Ro=
  • SignInfo的内容如下
<SignedInfo>
   <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
   <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/>
   <Reference URI="#_0">
    <Transforms>
     <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    </Transforms>
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    <DigestValue>CwMGnFZklO7XsDfFguzl0tw7iHM=</DigestValue>
   </Reference>
  </SignedInfo>

最佳答案

您是否记得在散列/验证之前对值进行 base64 解码? 顺便说一句,您可以使用 hash() 对 sha256 进行散列而无需 key 。

https://stackoverflow.com/questions/3984436/

相关文章:

bash - 使用转义序列呈现文本(如终端)

visual-studio-2010 - 如何将 const wchar_t* 转换为 wchar_

django-sessions - 在 Django 中,如何找到当前登录用户的所有其他事件 ses

python-3.x - 如何在 Panel (3D Blender 2.55) 中创建 UI "i

image-processing - 合并 povray 的任意大小的部分图像

indexing - 如何生成(书籍)索引?

jpa - JPQL 中的复杂顺序

.net - 通过 RDP 部署 .NET 应用程序

ruby-on-rails - 如何在 Rails 中访问父模型的实例变量?

ruby-on-rails - 超时::Selenium/Capybara/Cucumber 出错