使用XML中的HMAC-SHA1生成SignatureValue

时间:2010-10-21 05:05:20

标签: php xml signature saml

签名方法为HMAC-SHA1,我已生成<SignedInfo>。问题是我不确定在HMAC计算中使用什么作为关键。

我注意到有两个<Entropy>在初始请求(RST)和响应(RSTR)中包含<BinarySecret>。我从WS-Trust读到,这表明我可以使用来自响应的<BinarySecret>标记中指定的PSHA1<ComputeKey>这两个二进制值生成证明密钥。但是,我永远无法获得与服务提供商样本中的签名值相同的签名值。

任何信息都会有所帮助!

举个例子:

  • 来自RST的二进制秘密是 grrlUUfhuNwlvQzQ4bV6TT3wA8ieZPltIf4+H7nIvCE=
  • 来自RSTR的二进制秘密是 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>

1 个答案:

答案 0 :(得分:0)

您是否记得在散列/验证之前对base64进行解码? 顺便使用hash(),你可以在没有键的情况下使用sha256进行哈希。