为什么base64是一个sha1/sha256哈希?

tun*_*una 8 base64 sha1 sha256 hmac amazon-web-services

任何人都可以告诉我为什么亚马逊想要hmac-sha1/sha256哈希的base64?

http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/HMACAuth.html

我知道base64是用ascii表示二进制日期,但sha1/sha256已经是ascii - 我的意思是它唯一的十六进制.

谢谢

蒂莫

zne*_*eak 18

这些哈希值不是ASCII - 您看到十六进制数字的原因是因为用于生成它们的软件采用摘要的二进制输出并将其转换为十六进制数字的ASCII字符串.

例如,MD5摘要将填充16个字节的数组.您还可以将其表示为包含32个字符的字符串,但摘要的最基本形式仍然是字节数组.

将字节数组更改为十六进制字符串时,需要8位(一个完整字符)来表示每4位数据.虽然不经常这样称呼,但你可以说它使用"base16"编码,因为你一次抓取4位并将它们映射到16个字符的字母表.

另一方面,Base64一次抓取6位并将它们映射到64个字符的字母表.这意味着您需要8位(同样,一个完整字符)来表示每6位数据,其中有一半是base16的浪费位.base16编码的字符串将始终是原始字符串的两倍; base64编码的字符串只有三分之三.对于SHA256哈希,base16执行64字节,但base64执行大约43.


Dan*_* D. 5

例如,下面的bytes,hex和base64样本编码相同的字节:

  • 字节: 243 48 133 140 73 157 28 136 11 29 189 101 194 101 116 64 172 227 220 78
  • 十六进制: f330858c499d1c880b1dbd65c2657440ace3dc4e
  • base64 : 8zCFjEmdHIgLHb1lwmV0QKzj3E4=.

只有AWS要求其值为base64编码.

  • base64 使用较少的 ASCII 字符对相同的值进行编码。并且因为他们还在请求中使用通常用 base64 编码的公钥签名,所以他们可能认为对所有值使用一种编码是有意义的。 (3认同)