2008-08-29 14 views

Répondre

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

Il y a aussi 'Digest :: SHA1.base64digest 'foo'' – andrewrk

+10

FYI:' Digest' fait partie de la Ruby Standard Library (http://www.ruby-doc.org/stdlib- 1.9.2/libdoc/digest/rdoc/index.html). Il comprend des implémentations pour SHA1, SHA2, MD5 et d'autres algorithmes de hachage. – jwfearn

-25

Où serialize 'est une fonction définie par l'utilisateur ailleurs.

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

N'est-ce pas un doublon de la réponse de @ devstopfix? –

+0

même si c'est le cas, c'est un code assez moche ruby ​​à suggérer, et ne mentionne même pas qu'il faut 'require \ 'digest/sha1 \' '-1 – Rixius

+16

N'oubliez pas que stackoverflow a trop de visiteurs, pourquoi vous ne nous montrez pas la bonne façon de le faire? Moins de critiques plus d'exemples de code – Davidslv

8

Pour un hachage Base64, à valider une signature OAuth, je

require 'base64' 
require 'hmac-sha1' 

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

où est-ce qu'on obtient hmac-sha1? On dirait que ce n'est pas une gemme – andrewrk

+6

FYI, l'exigence 'hmac-sha1' est rencontrée à partir de la gemme 'ruby-hmac' – andrewrk

+1

Désolé pour le retard, heureux que vous ayez compris. –

5

J'ai créé une aide gem qui est une simple enveloppe autour du code SHA1

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

=> "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1 

=> "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"