Ruby 코드가 작동하여 주어진 문자열 및 키에서 SHA1 해시 생성

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

  •  19-09-2019
  •  | 
  •  

문제

루비에서 일하려고하는 작은 코드 스 니펫이 있습니다.

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

이것은 오류 파일을 제공합니다 .rb : 1 : in`require ':로드 할 파일이 없습니다-파일에서 hmac-md5 (loaderror)에서 rb : 1

저는 Ruby에 익숙하지 않거나 포함/요구 모듈이 작동하는 방법. (또는 언어가 번들로 번들되어 있거나 별도의 다운로드가 필요한 경우이 기능을 만들기 위해 어떤 파일/코드가 누락 되었습니까?

도움이 되었습니까?

해결책

설치해야합니다 루비 -HMAC 모듈. 보다 이 블로그 게시물 부드러운 소개를 위해.

다른 팁

무언가가있는 것 같습니다 진지하게 잘못된. 루비는 전화하려고하는 것을 말합니다 require 스크립트의 첫 번째 줄에서로드하라고 지시하는 파일을 찾을 수 없습니다. 하지만! 당신은 그렇지 않습니다 전화 require 대본의 첫 줄에서! 사실, 당신은 전화하지 않습니다 require 어딘가에 당신의 대본에서.

무엇 해야합니다 심하게 고장난.

하나 내가 당신의 코드에서 볼 수있는 잠재적 문제는 hash 루비의 표준 방법입니다 이미 완전히 다른 목적으로 정의됩니다. 그것을 무시하면 아마도 조만간 문제를 일으킬 것입니다. 그러나, 당신이보고있는 오류는 우리가 그것에 도달하기 전에도 발생하므로 관련이 없습니다. 즉각적인 당면한 문제.

내가 만들 수있는 한, 이것은 당신이하려는 일인 것 같습니다.

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