2010-10-21 94 views
2

签名方法是HMAC-SHA1,并且我已经有<SignedInfo>生成。问题是我不确定在HMAC计算中使用什么作为密钥。使用XML中的HMAC-SHA1生成SignatureValue

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

任何信息都有帮助!

作为一个例子:

  • 从RST二进制秘密是 grrlUUfhuNwlvQzQ4bV6TT3wA8ieZPltIf4+H7nIvCE=
  • 从RSTR二进制秘密是 YLABh3ZmZyiO5gvVLZe9J4JPd9w59KGeTFwE85XlzxE=
  • 正确签名值是 nXJEN8p1nupMA/00TK03VZlADkU=
  • 签名值I生成是 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> 

回答

0

你记得的base64散列/验证之前解码值? 顺便说一句,你可以使用hash()来散列没有密钥的sha256。