2012-03-11 95 views

回答

16

这些哈希值是不ASCII-的,你看到的十六进制数字的原因是因为你用它来生成它们的软件需要摘要的二进制输出,并把它变成一个ASCII字符串十六进制数字例如,MD5摘要将填充16字节的数组。您也可以将其表示为32个字符的字符串,但摘要的最基本形式仍然是字节数组。

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

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

+0

回答我的问题。谢谢! – tuna 2012-03-11 23:58:05

+0

@zneak空间高效是在散列上使用Base 64编码的原因。如果我们需要发送这个散列,我们需要该散列可以表示为文本,而Base64通过将二进制数据限制为一个集合64个大部分重叠的字符来自大多数常用编码? – crackerplace 2014-09-29 14:31:08

+0

@zneak我的意思是通过在任何计算机上给出一个可表格形式的散列。 – crackerplace 2014-09-29 14:38:53

4

例如,下面的字节数,十六进制,并且样品的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编码。

+0

好的,但是使用base64而不是hex有什么好处?我的意思是为什么亚马逊使用base64而不是十六进制? – tuna 2012-03-12 09:53:45

+1

base64以较少的ASCII字符编码相同的值。而且由于他们也使用通常在其请求中使用base64编码的公钥签名,他们可能会认为对所有值使用一种编码是有意义的。 – 2012-03-12 12:28:48