Bagaimana cara membuat hash SHA1 di ruby?

158

Fungsi SHA Hash

quackingduck
sumber
3
SHA-1 terbukti tidak aman. Pertimbangkan untuk menggunakan alternatif yang lebih aman, seperti SHA-256, atau SHA-3. shattered.io
Jonas Elfström

Jawaban:

384
require 'digest/sha1'
Digest::SHA1.hexdigest 'foo'
perbaikan tanpa henti
sumber
41
Ada jugaDigest::SHA1.base64digest 'foo'
andrewrk
13
FYI: Digestadalah bagian dari Ruby Standard Library ( ruby-doc.org/stdlib-1.9.2/libdoc/digest/rdoc/index.html ). Ini termasuk implementasi untuk SHA1, SHA2, MD5 dan algoritma hash lainnya.
jwfearn
8

Untuk hash yang disandikan Base64, untuk memvalidasi tanda tangan Oauth, saya menggunakan

require 'base64'
require 'hmac-sha1'

Base64.encode64((HMAC::SHA1.new('key') << 'base').digest).strip
Thiago Ganzarolli
sumber
6
FYI, persyaratan 'hmac-sha1' dipenuhi dari permata 'ruby-hmac'
andrewrk
7

Saya membuat permata pembantu yang merupakan pembungkus sederhana di sekitar beberapa kode sha1

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

 => "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1

 => "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 
Gregory Ostermayr
sumber
-25

Di mana 'bersambung' adalah beberapa fungsi pengguna yang didefinisikan di tempat lain.

 def generateKey(data)
    return Digest::SHA1.hexdigest ("#{serialize(data)}")
 end
r4ccoon
sumber
Bukankah ini duplikat dari jawaban @ devstopfix?
Andrew Grimm
bahkan jika itu adalah, itu adalah beberapa kode ruby ​​yang sangat jelek untuk disarankan, dan bahkan tidak menyebutkan bahwa itu memerlukan `memerlukan \ 'intisari / sha1 \' '-1
Rixius
16
Jangan lupa bahwa stackoverflow memiliki terlalu banyak pengunjung, mengapa Anda tidak menunjukkan kepada kami cara yang tepat untuk melakukannya? Kritik kurang contoh kode lebih
Davidslv
1
apa fungsi 'cerita bersambung' ini? itu bukan bagian dari ruby. Lebih buruk lagi, string yang diteruskan ke hexdigest sama sekali tidak dinamis! Metode ini akan mengembalikan hash yang sama terlepas dari data apa yang Anda berikan!
Blixxy
2
Perlu require 'digest/sha1'untuk menggunakan SHA1metode.
Gus Shortz