Search code examples
ruby-on-railsrubysha256hmac

Using HMAC SHA256 in Ruby


I'm trying to apply HMAC-SHA256 for generate a key for an Rest API.

I'm doing something like this:

def generateTransactionHash(stringToHash)
  key = '123'
  data = 'stringToHash'
  digest = OpenSSL::Digest.new('sha256')

  hmac = OpenSSL::HMAC.digest(digest, key, data)
  puts hmac
end

The output of this is always this: (if I put '12345' as parameter or 'HUSYED815X', I do get the same)

ۯw/{o���p�T����:��a�h��E|q

The API is not working because of this... Can some one help me with that?


Solution

  • According to the documentation OpenSSL::HMAC.digest

    Returns the authentication code an instance represents as a binary string.

    If you have a problem using that maybe you need a hex encoded form provided by OpenSSL::HMAC.hexdigest

    Example

    key = 'key'
    data = 'The quick brown fox jumps over the lazy dog'
    digest = OpenSSL::Digest.new('sha256')
    
    OpenSSL::HMAC.digest(digest, key, data)
    #=> "\xF7\xBC\x83\xF40S\x84$\xB12\x98\xE6\xAAo\xB1C\xEFMY\xA1IF\x17Y\x97G\x9D\xBC-\x1A<\xD8"
    
    OpenSSL::HMAC.hexdigest(digest, key, data)
    #=> "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"