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

158

SHA хэш-функции

quackingduck
источник
3
Было показано, что SHA-1 небезопасен. Подумайте об использовании более безопасных альтернатив, таких как SHA-256 или SHA-3. shattered.io
Йонас Эльфстрем

Ответы:

384
require 'digest/sha1'
Digest::SHA1.hexdigest 'foo'
devstopfix
источник
41
Там такжеDigest::SHA1.base64digest 'foo'
andrewrk
13
К вашему сведению: Digestявляется частью стандартной библиотеки Ruby ( ruby-doc.org/stdlib-1.9.2/libdoc/digest/rdoc/index.html ). Он включает в себя реализации для алгоритмов хеширования SHA1, SHA2, MD5 и других.
jwfearn
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
r4ccoon
источник
Разве это не дубликат ответа @ devstopfix?
Эндрю Гримм
даже если это так, это довольно уродливый рубиновый код, который можно предложить, и даже не упоминает, что ему нужно `require \ 'digest / sha1 \' '-1
Rixius
16
Не забывайте, что у stackoverflow слишком много посетителей, почему вы не показываете нам правильный способ сделать это? Меньше критиков, больше примеров кода
Davidslv
1
что это за функция сериализации? это не часть рубина. Что еще хуже, строка, передаваемая в hexdigest, вообще не является динамической! Этот метод будет возвращать один и тот же хеш независимо от того, какие данные вы ему предоставите!
Бликси
2
Нужно require 'digest/sha1'для того, чтобы использовать SHA1метод.
Гас Шортц