让Ruby代码工作,从给定的字符串和键创建SHA1哈希

让Ruby代码工作,从给定的字符串和键创建SHA1哈希,ruby,hash,sha1,Ruby,Hash,Sha1,我有一个小的代码片段,我正试图在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:Th

我有一个小的代码片段,我正试图在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:在'require'中:没有要加载的文件--hmac-md5(LoadError) 从文件.rb:1


我不熟悉ruby或者include/require模块是如何工作的。(或者如果它们与该语言捆绑在一起或需要单独下载。我缺少什么文件/代码来实现此功能?

您需要安装。请参阅以获得一个温和的介绍。

似乎有严重错误。Ruby告诉您,您正试图在脚本的第一行中调用
require
,但它不能找到要加载的文件。但是!在脚本的第一行中没有调用
require
。事实上,在脚本的任何地方都没有调用
require

一定有什么东西坏得很厉害

我在您的代码中看到的一个潜在问题是,
hash
是Ruby中的一个标准方法,它已经被定义为一个完全不同的用途。重写它可能迟早会导致问题。但是,您看到的错误发生在我们还没有达到这一点之前,因此它与直接的问题a无关t手

据我所知,这似乎是你想要做的:

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
需要“openssl”
需要“base64”
DIGEST=OpenSSL::DIGEST::DIGEST.new('sha1')
def hmac(hs、keyh)
digest=OpenSSL::HMAC.digest(digest,Base64.decode64(keyh),hs)
返回Base64.encode64(摘要).chomp
结束
需要“测试/单元”
类TestHmac

但是我仍然感到困惑的是,当你从一开始就不调用
require
时,你怎么能从它那里得到一条错误消息。

他向我们展示了他的全部代码吗?也许他确实在某处调用了
require
。OpenSSL已经成为Ruby标准库的一部分很长时间了。没有必要安装任何东西波斯特解决了这个问题