Como crio um hash SHA1 em ruby?

158

Funções SHA Hash

quackingduck
fonte
3
Demonstrou-se que o SHA-1 é inseguro. Considere usar alternativas mais seguras, como SHA-256 ou SHA-3. shattered.io
Jonas Elfstrom

Respostas:

384
require 'digest/sha1'
Digest::SHA1.hexdigest 'foo'
devstopfix
fonte
41
Há tambémDigest::SHA1.base64digest 'foo'
andrewrk
13
FYI: Digestfaz parte da Ruby Standard Library ( ruby-doc.org/stdlib-1.9.2/libdoc/digest/rdoc/index.html ). Inclui implementações para SHA1, SHA2, MD5 e outros algoritmos de hash.
jwfearn
8

Para um hash codificado em Base64, para validar uma assinatura Oauth, usei

require 'base64'
require 'hmac-sha1'

Base64.encode64((HMAC::SHA1.new('key') << 'base').digest).strip
Thiago Ganzarolli
fonte
6
Para sua informação, o requisito 'hmac-sha1' é atendido a partir da gema 'ruby-hmac'
andrewrk
7

Eu criei uma gema auxiliar que é um invólucro simples em torno de um código sha1

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

 => "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1

 => "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 
Gregory Ostermayr
fonte
-25

Onde 'serializar' é alguma função do usuário definida em outro lugar.

 def generateKey(data)
    return Digest::SHA1.hexdigest ("#{serialize(data)}")
 end
r4ccoon
fonte
Isso não é uma duplicata da resposta do @ devstopfix?
Andrew Grimm
mesmo que seja, é algum código ruby muito feio para ser sugerindo, e nem sequer mencionar que ele precisa `exigem \ 'digerir / sha1 \'' -1
Rixius
16
Não se esqueça que o stackoverflow tem muitos visitantes. Por que você não nos mostra o caminho certo para fazer isso? Menos críticos mais exemplos de código
Davidslv
1
o que é essa função 'serializar'? isso não faz parte do ruby. Pior ainda, a string que está sendo passada para o hexdigest não é dinâmica! Esse método retornaria o mesmo hash, independentemente dos dados que você fornecer!
Blixxy
2
Necessidade require 'digest/sha1'para usar o SHA1método.
Gus Shortz