Ответ 1
Следующее эквивалентно вашему PHP-коду, хотя я решил не переносить его в одну строку.
Я использую gem ruby-hmac, потому что он работает с 1.8, а также с Ruby 1.9. Если вы используете исключительно Ruby 1.9, я считаю, что в стандартном пакете "дайджест" библиотеки HMAC реализована (но этого нет в версии 1.8 пакета). Убедитесь, что gem install ruby-hmac
require 'rubygems'
require 'base64'
require 'cgi'
require 'hmac-sha1'
key = '1234'
signature = 'abcdef'
hmac = HMAC::SHA1.new(key)
hmac.update(signature)
puts CGI.escape(Base64.encode64("#{hmac.digest}\n"))
# equivalent to:
# php -r "echo rawurlencode(base64_encode(hash_hmac('sha1', 'abcdef', '1234', true)));"
Еще лучше, используйте стандартный пакет библиотеки OpenSSL (который у большинства Linux и MacOS есть из коробки). Этот код будет работать на Ruby 1.8 и 1.9:
require 'base64'
require 'cgi'
require 'openssl'
key = '1234'
signature = 'abcdef'
puts CGI.escape(Base64.encode64("#{OpenSSL::HMAC.digest('sha1',key, signature)}\n"))
# equivalent to:
# php -r "echo rawurlencode(base64_encode(hash_hmac('sha1', 'abcdef', '1234', true)));"