2012-01-10 57 views
0

我嘗試了很多創建簽名以訪問一個Web服務。使用HMAC SHA-256和Base64Encoder簽名

他們要求我爲每個請求生成一個簽名。

爲了生成簽名,我有一個消息說「abc」,一個祕密鍵稱爲「xyz」。據他們說我的簽名應爲以下Ruby代碼

require 'base64' 

require 'openssl' 

secret = "xyz" 

request = "abc" 

digest = OpenSSL::Digest::Digest.new('sha256') 

signature = Base64.encode64(OpenSSL::HMAC.digest(digest, secret, request)).chomp 

signature處理應該是9ZjsfVB3k5nPNLf5he+gfyYaxNWCIJ6J8YcRpxW5GG0=,但我沒有得到這個使用Java代碼是如下:

SecretKey secretKey = null;  

byte[] keyBytes = keyString.getBytes("UTF-8");  

Mac mac = Mac.getInstance("HMACHSA256"); 

secretKey = new SecretKeySpec(keyBytes,mac.getAlgorithm()); 

mac.init(secretKey); 

byte[] text = baseString.getBytes("UTF-8"); 

//mac.update(digest.digest()); 

byte[] encodedText = mac.doFinal(text);  

return new String(Base64.encodeBase64(encodedText)).trim(); 

請幫我在這。

+1

是*「HMACHSA256」*錯字?它是你粘貼的實際運行代碼嗎?不應該該字符串,一開始,「* HMACSHA256」*? – TacticalCoder 2012-01-10 18:45:05

+0

是的,這是我的運行代碼,我得到的簽名,但它不正確的簽名。 – user1141515 2012-01-11 15:33:37

+1

@ user1141515:有趣的是,你應該得到一個'NoSuchAlgorithmException' - 我也想你打算在上面輸入「HMACSHA256」。 – 2012-01-11 17:38:03

回答

1

我跑的Java代碼,並獲得oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

我去this在線網站和我oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

我跑頂部腳本作爲紅寶石腳本,我得到了oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

由於這三個匹配,我建議上述所有代碼都是一致的,但是您報告的值不正確。上面的Java代碼幾乎是教科書HMACSHA256 for Java,但我不能評論Ruby部分,因爲我只是一個Java人。