【发布时间】:2016-07-01 19:57:42
【问题描述】:
inverse question exists 没有回答和我不明白的评论。
我正在尝试为 API 的伪 OAuth 身份验证标头创建 Base64 编码的 HMAC-SHA1 签名。我找到了一份支持文档(需要经过身份验证的访问权限),它会带您了解创建签名的整个过程。在对哈希进行 Base64 编码的最后一步之前,我能够创建相同的数据。
支持文档指出 HMAC-SHA1 签名是:
cb5acd2d3ef689a8fbec4d06c576371834689673
我得到:
CB5ACD2D3EF689A8FBEC4D06C576371834689673
支持文件然后声明
从步骤 3 中的十六进制结果字符串,使用 Base64 对值进行编码
并提供以下 Base64 编码结果(58 个字符):
Y2I1YWNkMmQzZWY2ODlhOGZiZWM0ZDA2YzU3NjM3MTgzNDY4OTY3Mw==
当我使用Convert.ToBase64String() 转换我的签名时,我得到(28 个字符):
y1rNLT72iaj77E0GxXY3GDRolnM=
我很困惑,我不知道支持文档是否不正确,或者我做错了什么。我正在生成一个 28 个字符的字符串,而示例是 56 个字符,这一事实太有趣了,不容忽视。
aforementioned semi-duplicate question 中的评论也难倒我。我看不到字符串“MDY”如何转换为对我有意义的任何 ascii 或 unicode 数字 - 我不明白评论作者是如何得出这个结论的。
十六进制值被编码为文本 ("062..." == 0x30, 0x36, 0x32, ...) 而不是它所代表的大量数字。
【问题讨论】:
-
较长的base64字符串是字符串
"cb5acd2...的base64编码,较短的是字节数组new byte[] {0xcb, 0x5a, 0xcd...的base64编码。