Jak utworzyć skrót SHA1 w Ruby?

158

Funkcje SHA Hash

kwak kaczka
źródło
3
Wykazano, że SHA-1 jest niepewny. Rozważ użycie bezpieczniejszych alternatyw, takich jak SHA-256 lub SHA-3. shattered.io
Jonas Elfström

Odpowiedzi:

384
require 'digest/sha1'
Digest::SHA1.hexdigest 'foo'
devstopfix
źródło
41
Jest teżDigest::SHA1.base64digest 'foo'
andrewrk
13
FYI: Digestjest częścią Ruby Standard Library ( ruby-doc.org/stdlib-1.9.2/libdoc/digest/rdoc/index.html ). Zawiera implementacje algorytmów wyznaczania wartości skrótu SHA1, SHA2, MD5 i innych.
jwfearn
8

W przypadku skrótu zakodowanego w Base64, aby zweryfikować podpis Oauth, użyłem

require 'base64'
require 'hmac-sha1'

Base64.encode64((HMAC::SHA1.new('key') << 'base').digest).strip
Thiago Ganzarolli
źródło
6
Do Twojej wiadomości, wymóg `` hmac-sha1 '' jest spełniony z klejnotu `` ruby-hmac ''
andrewrk
7

Stworzyłem klejnot pomocnika, który jest prostym opakowaniem wokół kodu sha1

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

 => "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1

 => "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 
Gregory Ostermayr
źródło
-25

Gdzie „serialize” to jakaś funkcja użytkownika zdefiniowana w innym miejscu.

 def generateKey(data)
    return Digest::SHA1.hexdigest ("#{serialize(data)}")
 end
r4ccoon
źródło
Czy to nie jest duplikat odpowiedzi @ devstopfix?
Andrew Grimm
nawet jeśli tak, to sugeruje jakiś dość brzydki kod rubinowy i nawet nie wspomina, że ​​wymaga `` require \ 'digest / sha1 \' '-1
Rixius
16
Nie zapominaj, że stackoverflow ma zbyt wielu odwiedzających, dlaczego nie pokazujesz nam właściwego sposobu, aby to zrobić? Mniej krytyków, więcej przykładów kodu
Davidslv
1
co to za funkcja „serializacji”? to nie jest część rubinu. Co gorsza, ciąg przekazany do hexdigest wcale nie jest dynamiczny! Ta metoda zwróci ten sam hash bez względu na to, jakie dane mu podasz!
Blixxy,
2
Potrzebujesz require 'digest/sha1', aby użyć SHA1metody.
Gus Shortz