2016-04-18 49 views
1

HMAC在哈希函數中使用變量時,SHAAC中的SHA256哈希值會產生變化,而不是使用文字。紅寶石hmac sha256哈希因變量而異

我必須連接4個參數才能生成使用密鑰散列的消息字符串。連接的消息字符串生成與使用消息值作爲文字不同的散列。

require 'base64' 
require 'openssl' 

securityKey = 'A93reRTUJHsCuQSHR+L3GxqOJyDmQpCgps102ciuabc=' 
content = 'hello' 
id = '1000000855' 
tsp = '1460852115' 
guid = '75c6016eaa1e43b4807ba25232797714' 

contentmd5 = Base64.encode64(OpenSSL::Digest::MD5.digest(content)) 
inputString = id + tsp + guid + contentmd5 
puts inputString 
#Input String is 
#'1000000855146085211575c6016eaa1e43b4807ba25232797714XUFAKrxLKna5cZ2REBfFkg==' 

digest = OpenSSL::Digest.new('sha256') 
hmac = OpenSSL::HMAC.digest(digest, securityKey, inputString) 
securityToken = Base64.encode64(hmac) 
puts securityToken 
#Hash generated is 7ihOEZNeoJMwjLt84I8WfN5b0VwgYNOg8abPA3nZ0SM= 

digest = OpenSSL::Digest.new('sha256') 
hmac = OpenSSL::HMAC.digest(digest, securityKey, '1000000855146085211575c6016eaa1e43b4807ba25232797714XUFAKrxLKna5cZ2REBfFkg==') 
securityToken = Base64.encode64(hmac) 
puts securityToken 
#Hash generated is gPNytNGMbhg8b27rklqmEK/9xjNAcOq+7nldzyDL4g0= 

回答

2

看起來像Base64.encode64追加所以

docs

encode64(bin)中一個 「\ n」 來將其輸出的末尾返回Base64編碼 版本倉的。此方法符合RFC 2045.換行符是 添加到每60個編碼字符。

contentmd5 = Base64.encode64(OpenSSL::Digest::MD5.digest(content)) 

回報

"XUFAKrxLKna5cZ2REBfFkg==\n" 

"XUFAKrxLKna5cZ2REBfFkg==" 

-

可以使用strict_encode64不包括換行這樣:

contentmd5 = Base64.strict_encode64(OpenSSL::Digest::MD5.digest(content)) 

回報

=> "XUFAKrxLKna5cZ2REBfFkg==" 
+0

很不錯的。我認爲必須使用檢查('p')而不是'puts'來找出這些差異。 –

+0

真的很好。有用。我完全不知道爲什麼字面會起作用,但即使顯示的字符串是相同的,變量也不會。這解釋了它。非常感謝。 – liferunsoncode