2008-08-29 10 views

risposta

358
require 'digest/sha1' 
Digest::SHA1.hexdigest 'foo' 
+38

C'è anche 'Digest :: SHA1.base64digest 'foo'' – andrewrk

+10

FYI:' Digest' fa parte della Ruby Standard Library (http://www.ruby-doc.org/stdlib- 1.9.2/libdoc/digest/rdoc/index.html). Include implementazioni per SHA1, SHA2, MD5 e altri algoritmi di hash. – jwfearn

-25

Dove 'serializzare' è una funzione definita dall'utente altrove.

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

Non è un duplicato della risposta di @ devstopfix? –

+0

anche se lo è, è un codice ruby ​​piuttosto brutto da suggerire e non dice nemmeno che necessita 'require \ 'digest/sha1 \' '-1 – Rixius

+16

Non dimenticare che lo stackoverflow ha troppi visitatori, perché non ci mostri il modo giusto per farlo? Meno critiche più esempi di codice – Davidslv

8

Per un hash Base64 codificato, ad convalidato una firma Oauth, ho usato

require 'base64' 
require 'hmac-sha1' 

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

dove prendiamo hmac-sha1? sembra che non sia una gemma – andrewrk

+6

FYI, il requisito 'hmac-sha1' è soddisfatto dalla gemma 'ruby-hmac' – andrewrk

+1

Scusate per il ritardo, lieto che abbiate capito comunque. –

5

ho creato un aiutante gem che è un semplice wrapper per qualche codice SHA1

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

=> "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1 

=> "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"