2009-12-24 33 views
7

tôi đang làm việc với một số mã mà có một:
tiêu hóa/HMAC là một phần của ruby ​​chuẩn lib

begin 
require 'digest/hmac' 
USE_EMBEDDED_HMAC = false 
rescue 
puts "HMAC, not found in standard lib." + $!.message 
require 'hmac-sha1' 
USE_EMBEDDED_HMAC = true 
end 


Như tôi có thể nhìn thấy, ít nhất là trong đường ray 1.8.6 của nó không nằm trong lib tiêu chuẩn. Nó là một phần từ ruby ​​1,9 lib? Nếu không, tôi nên cài đặt bất kỳ đá quý?

Lưu ý rằng các giải pháp sử dụng OpenSSL sẽ không được chấp nhận vì nó sẽ thất bại nào trong "require 'tiêu hóa/HMAC"

Các mã trong câu hỏi là ở đây http://github.com/quetzall/cloud_cache/blob/master/lib/cloud_cache.rb

Trả lời

18

Nó có sẵn trong 1.8.7. Hãy thử điều này:

ruby -v 
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9] 

require 'openssl' 
digest = OpenSSL::Digest::Digest.new('sha1') 
OpenSSL::HMAC.digest(digest, "superscret", "Lorem ipsum dolor sit amet") 
OpenSSL::HMAC.hexdigest(digest, "superscret", "Lorem ipsum dolor sit amet") 
+2

Ví dụ này cũng hoạt động trên v1.8.6. – ewall

+0

Chuỗi thông báo cũng hoạt động. ví dụ: 'OpenSSL :: HMAC.hexdigest (" sha1 "," key "," secret ")' –

7

Từ 1.9.3 docs:

THẬN TRỌNG: Sử dụng thư viện này không được khuyến khích, bởi vì thực hiện này có nghĩa là để được thử nghiệm nhưng bằng cách nào đó đã vào series 1.9 mà không bị chú ý. Vui lòng sử dụng OpenSSL :: HMAC trong thư viện “openssl” để thay thế.

Các vấn đề liên quan