与えられた文字列とキーからSHA1ハッシュを作成し、動作するRubyコードを取得

StackOverflow https://stackoverflow.com/questions/1883642

  •  19-09-2019
  •  | 
  •  

質問

私は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からのエラーメッセージを取得することができますどのように困惑しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top