使用HMAC SHA-256和Base64Encoder进行签名

时间:2012-01-10 18:23:42

标签: java ruby base64 digital-signature hmac

我尝试了很多创建签名来访问一个Web服务。

他们要求我为每个请求生成签名。

为了生成签名,我有一条消息说“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 个答案:

答案 0 :(得分:1)

我运行了Java代码并获得了oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

我访问了this在线网站,我得到了oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

我将顶级脚本作为 ruby​​ 脚本运行,我得到oQLjGtDh255Vg5ix4fjVzHvFOq7TNygJRcbQ/EnF8JE=

由于这三个匹配,我建议上面的所有代码都是一致的,但您报告的值不正确。上面的Java代码几乎是用于Java的HMACSHA256教科书,但我不能对Ruby部分发表评论,因为我只是一个Java人。