¿Cómo creo un hash SHA1 en ruby?

Respuestas:

384
require 'digest/sha1'
Digest::SHA1.hexdigest 'foo'
devstopfix
fuente
41
También hayDigest::SHA1.base64digest 'foo'
andrewrk
13
FYI: Digestes parte de la Biblioteca estándar de Ruby ( ruby-doc.org/stdlib-1.9.2/libdoc/digest/rdoc/index.html ). Incluye implementaciones para SHA1, SHA2, MD5 y otros algoritmos hash.
jwfearn
8

Para un hash codificado Base64, para validar una firma Oauth, utilicé

require 'base64'
require 'hmac-sha1'

Base64.encode64((HMAC::SHA1.new('key') << 'base').digest).strip
Thiago Ganzarolli
fuente
66
Para su información, el requisito 'hmac-sha1' se cumple con la gema 'ruby-hmac'
andrewrk el
7

Creé una gema auxiliar que es un simple envoltorio alrededor de algún código sha1

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

 => "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1

 => "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 
Gregory Ostermayr
fuente
-25

Donde 'serializar' es alguna función de usuario definida en otra parte.

 def generateKey(data)
    return Digest::SHA1.hexdigest ("#{serialize(data)}")
 end
r4ccoon
fuente
¿No es esto un duplicado de la respuesta de @ devstopfix?
Andrew Grimm
incluso si es así, es un código rubí bastante feo para sugerir, y ni siquiera menciona que necesita `require \ 'digest / sha1 \' '-1
Rixius
16
No olvide que stackoverflow tiene demasiados visitantes, ¿por qué no nos muestra la forma correcta de hacerlo? Menos críticos más ejemplos de código
Davidslv
1
¿Qué es esta función 'serializar'? Eso no es parte de Ruby. Peor aún, ¡la cadena que se pasa a hexdigest no es dinámica en absoluto! ¡Este método devolvería el mismo hash independientemente de los datos que le proporcione!
Blixxy
2
Necesito require 'digest/sha1'para usar el SHA1método.
Gus Shortz