2012-01-10 9 views
0

1つのWebサービスにアクセスするためのシグネチャを作成するために多くの試みを行いました。HMAC SHA-256とBase64Encoderを使用した署名

各リクエストで署名を生成する必要がありました。

署名を生成するには、「abc」というメッセージと「xyz」という1つの秘密鍵があります。私の署名が

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次のRubyコードとして処理されなければならない彼らによると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" * a typo?貼り付けた実際の実行コードですか?その文字列を最初に "* HMACSHA256" *にするべきではありませんか? – TacticalCoder

+0

はい、これは私の実行コードです。署名は取得していますが、正しい署名ではありません。 – user1141515

+1

@ user1141515:おかしい、あなたは 'NoSuchAlgorithmException'を取得する必要があります - 私はあなたも" HMACSHA256 "とタイプすると思っています。 –

答えて

1

私はthisオンラインサイトに行って、私はルビースクリプトとしてトップスクリプトを実行した、と私はoQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

を得たoQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

を得たJavaコードを実行し、oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

を得ましたこれらの3つが一致しているので、上記のコードはすべて一貫していますが、報告する値が正しくないことをお勧めします。上記のJavaコードはJava用のテキストブックHMACSHA256ですが、Rubyの部分についてはコメントできません。

関連する問題