有人能告诉我为什么亚马逊需要hmac-sha1 / sha256哈希的base64编码吗?
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/HMACAuth.html
我知道base64是用于将二进制数据表示为ASCII字符,但sha1 / sha256已经是ASCII码了 - 我的意思是它只是十六进制。
谢谢
Timo
有人能告诉我为什么亚马逊需要hmac-sha1 / sha256哈希的base64编码吗?
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/HMACAuth.html
我知道base64是用于将二进制数据表示为ASCII字符,但sha1 / sha256已经是ASCII码了 - 我的意思是它只是十六进制。
谢谢
Timo
这些哈希值不是ASCII码——你看到十六进制数字的原因是,生成哈希值的软件将摘要的二进制输出转换为由十六进制数字组成的ASCII字符串。
例如,MD5摘要将填充一个16字节的数组。您也可以将其表示为32个字符的字符串,但最基本的摘要形式仍然是字节数组。
当您将字节数组转换为十六进制字符串时,您需要8位(一个完整字符)来表示每4位数据。尽管它通常不被称为这种方式,但您可以说这使用了"base16"编码,因为您每次抓取4个比特并将它们映射到一个由16个字符组成的字母表中。
另一方面,Base64每次抓取6个比特并将它们映射到一个由64个字符组成的字母表中。这意味着您需要8位(再次是一个完整字符)来表示每6位数据,这比base16浪费的位数少一半。一个base16编码的字符串将始终是原始数据的两倍大;一个base64编码的字符串只会增加四分之三的大小。对于SHA256哈希,base16需要64字节,但base64只需要约43字节。
243 48 133 140 73 157 28 136 11 29 189 101 194 101 116 64 172 227 220 78
f330858c499d1c880b1dbd65c2657440ace3dc4e
8zCFjEmdHIgLHb1lwmV0QKzj3E4=