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();
この上で私を助けてください。
は* "HMACHSA256" * a typo?貼り付けた実際の実行コードですか?その文字列を最初に "* HMACSHA256" *にするべきではありませんか? – TacticalCoder
はい、これは私の実行コードです。署名は取得していますが、正しい署名ではありません。 – user1141515
@ user1141515:おかしい、あなたは 'NoSuchAlgorithmException'を取得する必要があります - 私はあなたも" HMACSHA256 "とタイプすると思っています。 –