【发布时间】:2012-02-09 22:31:12
【问题描述】:
我正在尝试根据“已知信誉良好的来源”验证代码中生成的 OAuth 签名。除了最后一步,我的所有步骤都经过验证正确,其中“基本签名字符串”是 HMAC-SHA1 对密钥进行哈希处理,然后进行 base64 编码。
我已确认我的哈希值与算法预期的相同。然后我确认我的 base64 编码是相同的。试图确定我的编码失败的原因,我想检查我正在使用的编码器。
这是经过 base64 编码的(散列)字符串:
203ebb13a65cccaae5cb1b9d5af51fe41f534357
这是生成我的代码的 base64 编码:
MjAzZWJiMTNhNjVjY2NhYWU1Y2IxYjlkNWFmNTFmZTQxZjUzNDM1Nw==
根据http://www.motobit.com/util/base64-decoder-encoder.asp,那是正确的结果:
但是,根据http://www.online-convert.com/result/096d7b00138f3726daee5f6ddb107a62(提供秘密和基本字符串,而不是哈希),应该输出不同的base64。请注意,尽管 base64 存在差异,但哈希输出是我的正确哈希:
最后,“官方”测试器 (http://hueniverse.com/oauth/guide/authentication/) 从同一个哈希中输出一个第三个不同的 base64:
我不知道我做错了什么,而且这些工具输出不同结果的事实让我想知道是否真的存在 base64 编码之类的东西,或者它们是否实际上使用了不同的算法?也许它用于 OAuth 的事实会帮助您帮助我确定答案。
感谢智者提供的任何线索。
【问题讨论】:
-
答案是哈希是被解释为十六进制数据值还是被编码的字符串。每个网站都以不同的方式和隐含地处理这个问题