Как мне создать хэш SHA1 в ruby?


Ответы:



8

Для хэша в кодировке Base64, для проверки подписи Oauth, я использовал

require 'base64'
require 'hmac-sha1'

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

6
К вашему сведению, требование 'hmac-sha1' выполняется из гема 'ruby-hmac'
andrewrk

7

Я создал вспомогательный гем, который является простой оболочкой вокруг некоторого кода sha1

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

 => "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1

 => "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 

-25

Где 'serialize' - это некоторая пользовательская функция, определенная в другом месте.

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

Разве это не дубликат ответа @ devstopfix?
Эндрю Гримм

даже если это так, это довольно уродливый рубиновый код, который можно предложить, и даже не упоминает, что ему нужно `require \ 'digest / sha1 \' '-1
Rixius

16
Не забывайте, что у stackoverflow слишком много посетителей, почему вы не показываете нам правильный способ сделать это? Меньше критиков, больше примеров кода
Davidslv

1
что это за функция сериализации? это не часть рубина. Что еще хуже, строка, передаваемая в hexdigest, вообще не является динамической! Этот метод будет возвращать один и тот же хеш независимо от того, какие данные вы ему предоставите!
Бликси

2
Нужно require 'digest/sha1'для того, чтобы использовать SHA1метод.
Гас Шортц
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.