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

时间:2012-03-11 23:45:30

标签: amazon-web-services base64 sha1 sha256 hmac

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

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

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

由于

蒂莫

2 个答案:

答案 0 :(得分:18)

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

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

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

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

答案 1 :(得分:5)

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

  • bytes:243 48 133 140 73 157 28 136 11 29 189 101 194 101 116 64 172 227 220 78
  • hex:f330858c499d1c880b1dbd65c2657440ace3dc4e
  • base64:8zCFjEmdHIgLHb1lwmV0QKzj3E4=

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