与えられた文字列とキーからSHA1ハッシュを作成し、動作するRubyコードを取得
質問
私はRubyで動作するように取得しようとしている小さなコードスニペットを持っています。
digest = HMAC.digest(Digest.new(SHA1), Base64.decode64(key), HashString) return Base64.encode64(digest.to_s()).chomp()
次のように私はそれを試してみました。
hashstring = "POST application/octet-stream
Thu, 05 Jun 2008 16:38:19 GMT /rest/objects date:Thu, 05 Jun 2008 16:38:19 GMT groupacl:other=NONE listable-meta:part4/part7/part8=quick meta:part1=buy
id: 6039ac182f194e15b9261d73ce044939/user1 useracl:jane=FULL_CONTROL,juan=WRITE"
key = "AKLuryj6zs8ste4Y3jTGQp71xq0="
def hash(hs, keyh)
digest = HMAC.digest(Digest.new(SHA1), Base64.decode64(keyh), hs)
return Base64.encode64(digest.to_s()).chomp()
end
puts hash hashstring,key
これは私にエラーを与えます file.rb:1: ` '必要で:そのようなファイルが読み込まないように - HMAC-MD5(とLoadError) file.rbから:1
私はルビーに慣れていないんだか、どのように/含めるモジュールの作業が必要です。彼らは言語にバンドルされている場合か(または別々のダウンロードが必要です。/コードは、私は、この関数を作るために行方不明です何のファイル?
解決
あなたはルビー-HMACモジュールをインストールする必要があります。穏やか導入のためにこのブログの記事でrel="noreferrer">
他のヒント
の真剣の何か間違っがあるようです。 Rubyはスクリプトの1行目にrequire
を呼び出すようにしようとしていること、そしてそれはあなたがそれをロードするように指示していたファイルを見つけることができないことを示しています。しかし!あなたは、スクリプトの最初の行ではありません。の呼び出しのrequire
を行います!実際には、あなたのスクリプトでの任意の場所にのrequire
を呼び出すことはありません。
サムシングがの深刻の壊れます。
でなければなりません 私はあなたのコードで参照 のひとつの潜在的な問題、hash
はRubyでの標準的な方法であり、それは、のすでにの全く異なる目的のために定義されていることです。それをオーバーライドすることは、おそらく、遅かれ早かれ問題につながるとしています。それが手元にの即時の問題のために関連していないですので、私たちも、それに到達する前にしかし、あなたが見ているエラーは仕方が起こります。
私の知る限りが出て作ることができるように、これはあなたがやろうとしているもののようです。
require 'openssl'
require 'base64'
DIGEST = OpenSSL::Digest::Digest.new('sha1')
def hmac(hs, keyh)
digest = OpenSSL::HMAC.digest(DIGEST, Base64.decode64(keyh), hs)
return Base64.encode64(digest).chomp
end
require 'test/unit'
class TestHmac < Test::Unit::TestCase
def test_that_the_hmac_gets_computed_correctly
hashstring = 'POST application/octet-stream
Thu, 05 Jun 2008 16:38:19 GMT /rest/objects date:Thu, 05 Jun 2008 16:38:19 GMT groupacl:other=NONE listable-meta:part4/part7/part8=quick meta:part1=buy
id: 6039ac182f194e15b9261d73ce044939/user1 useracl:jane=FULL_CONTROL,juan=WRITE'
key = 'AKLuryj6zs8ste4Y3jTGQp71xq0='
assert_equal 'KxQMJeaVqxFdujha89UuksEUiAg=', hmac(hashstring, key)
end
end
しかし、私はまだあなたがのことはありませんのあるときは、最初の場所でそれを呼び出すrequire
からのエラーメッセージを取得することができますどのように困惑しています。