gpt4 book ai didi

c# - 为什么我的 Base64 编码哈希只包含 28 个字符?

转载 作者:行者123 更新时间:2023-12-04 00:10:45 31 4
gpt4 key购买 nike

inverse question exists没有答案和我不明白的评论。

我正在尝试创建一个 Base64 编码的 HMAC-SHA1 API 的伪 OAuth 身份验证 header 的签名。我找到了一份支持文档(需要经过身份验证的访问权限),它可以带您了解签名创建过程。在最后一步之前,我能够创建相同的数据,即使用 Base64 对哈希进行编码。

支持文档指出 HMAC-SHA1 签名是:

cb5acd2d3ef689a8fbec4d06c576371834689673

然后我得到:

CB5ACD2D3EF689A8FBEC4D06C576371834689673

支持文档然后指出

From the hex result string in step 3, encode the value using Base64

并提供以下 Base64 编码结果(58 个字符):

Y2I1YWNkMmQzZWY2ODlhOGZiZWM0ZDA2YzU3NjM3MTgzNDY4OTY3Mw==

当我使用 Convert.ToBase64String() 转换我的签名时,我得到(28 个字符):

y1rNLT72iaj77E0GxXY3GDRolnM=

我很困惑,我不知道是支持文档不正确还是我做错了什么。我正在生成一个 28 个字符的字符串,而示例是 56 个字符,这一事实太有趣了,不容忽视。

评论在aforementioned semi-duplicate question也难倒我。我看不出字符串“MDY”如何转换为对我有意义的任何 ascii 或 unicode 数字 - 我不明白评论作者是如何得出这个结论的。

The hex value is being encoded as text ("062..." == 0x30, 0x36, 0x32, ...) rather than as the large number it represents.

最佳答案

您的签名是一个 20 字节(160 位)长的字节数组。所以它基本上是一个很长的数字。

当你显示它时,你将它转换成一个十六进制字符串,所以每个字节显示为 2 个字符,所以你得到一个 40 个字符长的字符串。

Base64 编码为每 3 个字节的有效负载提供 4 个字符进行编码。

如果您使用 base64 编码 20 字节的二进制数据,您将得到 26.6 字节,四舍五入为 28(每 4 字节四舍五入)。如果您对 40 个字符长的字符串(320 位)进行编码,您将得到 53,3 个字符,再次四舍五入为 56。

我想你正在做后者,编码一个字符串而不是一个 byte[]。

关于c# - 为什么我的 Base64 编码哈希只包含 28 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36027187/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com