tags:

views:

60

answers:

1

PHP code:

 function compute_signature($key, $hash_string)
    {
        $digest = hash_hmac("sha1", $hash_string, $key, true);
        return base64_encode($digest);
    }

Ruby Code:

    digest = HMAC.digest(Digest.new(SHA1), Base64.decode64(key), HashString)
return Base64.encode64(digest.to_s()).chomp()

Could this be a charset issue? I found this: http://stackoverflow.com/questions/790232/c-sha-1-vs-php-sha-1-different-results

If so how could I fix? Note I must make PHP match Rubys results, the reverse would not help in this situation.

+1  A: 

In the Ruby version you have a base64-encoded key; in PHP you are using the $key directly as a binary key. Could that be the issue?

(As for charsets, well, do you have any non-ASCII in there? What's a typical $hash_string?)

bobince
Should have clarified on the $key, when I pass it on the php side its already base64 decoded. A typical hashstring is alphanumeric. (web request headers)
stormist
hmm, you'd think that'd work then... unless it contains non-matching newlines, perhaps? How about an example value/hash? Would at least enable us to see whether it was the PHP or Ruby version that was “wrong”...
bobince