C# 为什么我的Base64编码哈希只包含28个字符?
没有回答,也没有我不理解的评论 我正在尝试为API的伪OAuth身份验证头创建Base64编码的签名。我发现支持文档需要经过身份验证的访问权限,可以引导您完成创建签名的过程。我能够创建相同的数据,直到最后一步,即对哈希进行Base64编码 支持文件规定HMAC-SHA1签名为:C# 为什么我的Base64编码哈希只包含28个字符?,c#,base64,encode,sha,C#,Base64,Encode,Sha,没有回答,也没有我不理解的评论 我正在尝试为API的伪OAuth身份验证头创建Base64编码的签名。我发现支持文档需要经过身份验证的访问权限,可以引导您完成创建签名的过程。我能够创建相同的数据,直到最后一步,即对哈希进行Base64编码 支持文件规定HMAC-SHA1签名为: cb5acd2d3ef689a8fbec4d06c576371834689673 我得到: CB5ACD2D3EF689A8FBEC4D06C576371834689673 然后,支持文件指出: 从步骤3中的十六进制
cb5acd2d3ef689a8fbec4d06c576371834689673
我得到:
CB5ACD2D3EF689A8FBEC4D06C576371834689673
然后,支持文件指出:
从步骤3中的十六进制结果字符串中,使用Base64对值进行编码
并提供以下Base64编码结果58个字符:
Y2I1YWNkMmQzZWY2ODlhOGZiZWM0ZDA2YzU3NjM3MTgzNDY4OTY3Mw==
y1rNLT72iaj77E0GxXY3GDRolnM=
当我使用Convert.ToBase64String转换我的签名时,我得到28个字符:
Y2I1YWNkMmQzZWY2ODlhOGZiZWM0ZDA2YzU3NjM3MTgzNDY4OTY3Mw==
y1rNLT72iaj77E0GxXY3GDRolnM=
我被难住了,我不知道支持文件是否不正确,或者我是否做错了什么。我正在生成一个28个字符的字符串,而示例是56个字符,这一事实非常有趣,不容忽视
报纸上的评论也让我感到困惑。我看不出字符串MDY如何翻译成任何对我有意义的ascii或unicode数字——我不明白注释作者是如何得出这个结论的
十六进制值被编码为文本062…==0x30、0x36、0x32,
... 而不是它所代表的庞大数字
您的签名是一个20字节160位长的字节数组。 所以这基本上是一个很长的数字 当您显示它时,您正在将其转换为十六进制字符串,因此每个字节显示为2个字符,因此您得到一个40个字符长的字符串 Base64编码每3个字节的有效负载提供4个字符进行编码 如果用base64编码20字节的二进制数据,则得到26.6字节,四舍五入为28,则每4个字节四舍五入一次。 如果将40个字符长的字符串编码为320位,则得到53,3个字符,再次四舍五入为56
我想你是在做后者,编码一个字符串而不是一个字节[]。我在这里遇到了同样的问题。您必须将sha1sum结果转换为十六进制格式。例如,当sha1sum结果为dfe5ec35f9c9f144d3814821a558bcfa23ab1a58时,控制台以字符串格式输出 您可以使用UltraEdit或其他文本编辑器,将其编辑为十六进制 然后将其另存为文件。 正确答案3+XsNfnJ8UTTgUghpVi8+iOrGlg=在对文件进行base64编码后出现
试试看。希望有帮助。较长的base64字符串是字符串cb5acd2的base64编码。。。虽然较短的是字节数组新字节[]{0xcb,0x5a,0xcd的base64编码……没错,但我当时没有足够的声誉对A Chiesa先生的回答发表评论~~