2012-03-11 130 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