Làm cách nào để tạo băm SHA1 trong ruby?


Câu trả lời:



8

Đối với hàm băm được mã hóa Base64, để xác thực chữ ký Oauth, tôi đã sử dụng

require 'base64'
require 'hmac-sha1'

Base64.encode64((HMAC::SHA1.new('key') << 'base').digest).strip

6
FYI, yêu cầu 'hmac-sha1' được đáp ứng từ viên ngọc 'ruby-hmac'
andrewrk

7

Tôi đã tạo ra một viên ngọc trợ giúp , một trình bao bọc đơn giản xung quanh một số mã sha1

require 'rickshaw'
> Rickshaw::SHA1.hash('LICENSE.txt')

 => "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1

 => "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 

-25

Trong đó 'tuần tự hóa' là một số chức năng người dùng được xác định ở nơi khác.

 def generateKey(data)
    return Digest::SHA1.hexdigest ("#{serialize(data)}")
 end

Đây không phải là bản sao câu trả lời của @ devstopfix sao?
Andrew Grimm

ngay cả khi đó là, đó là một số mã ruby ​​khá xấu xí được đề xuất, và thậm chí không đề cập rằng nó cần `yêu cầu \ 'digest / sha1 \' '-1
Rixius

16
Đừng quên rằng stackoverflow có quá nhiều khách truy cập, tại sao bạn không chỉ cho chúng tôi cách làm đúng? Ít chỉ trích hơn các ví dụ mã
Davidslv

1
chức năng 'tuần tự hóa' này là gì? đó không phải là một phần của ruby. Tệ hơn nữa, chuỗi được chuyển đến hexdigest hoàn toàn không động! Phương pháp này sẽ trả về cùng một hàm băm bất kể dữ liệu bạn cung cấp cho nó là gì!
Blixxy

2
Cần require 'digest/sha1'để sử dụng SHA1phương pháp.
Gus Shortz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.