2014-03-01 18 views
1

我使用Base64.encode64在API請求(我沒有開發的API)中使用HMAC創建哈希。生成的散列有時候包含「+」。包含「+」的請求失敗。請求沒有成功。在Base64.encode64輸出中加號?

例如,Python中的同一種腳本從未在Base64編碼哈希中具有「+」。

下面是兩個片段。同樣,Python從來沒有「+」,Ruby有時會這樣做。

任何想法是怎麼回事?我怎樣才能保持Ruby的base64編碼不使用「+」字符?

紅寶石:

hmac = OpenSSL::HMAC.digest('sha256', hmackey, request_string) 
signature = URI::encode(Base64.encode64(hmac)) 

的Python:

hmac = hmac.new(self.hmackey, urltosign, digestmod=hashlib.sha256).digest() 
signature = base64.b64encode(hmac) 
+1

+是base64中的有效字符。這些是否相同?我沒有在python中看到相當於你的'URI :: encode'的步驟,它也會將所有的空格都改爲+(base64之後的) – Joe

回答

3

Python使用RFC 3548base64轉換。其他語言如Ruby,Java(可能爲RFC 2045),他們可能會使用不同的RFC進行轉換。所以你可能會發現幾乎沒有使用/,很少有人在他們的編碼字符串上使用+

所以,如果你那麼你需要與他們匹配,只需在編碼後用相同的字符替換字符。