如何在Ruby中创建SHA1哈希?

164

4
SHA-1已被证明存在安全风险。考虑使用更安全的替代方案,例如SHA-256或SHA-3。https://shattered.io/ - Jonas Elfström
4个回答

397
require 'digest/sha1'
Digest::SHA1.hexdigest 'foo'

43
还有Digest::SHA1.base64digest 'foo' - andrewrk
14
FYI:Digest 是 Ruby 标准库的一部分(http://www.ruby-doc.org/stdlib-1.9.2/libdoc/digest/rdoc/index.html)。它包含 SHA1、SHA2、MD5 和其他哈希算法的实现。 - jwfearn
你应该使用Digest::SHA2.hexdigest,因为它更安全且尚未发现任何碰撞。 - Joshua Pinter

8

为了验证Oauth签名的Base64编码哈希值,我使用了以下方法:

require 'base64'
require 'hmac-sha1'

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

8
请注意,'hmac-sha1' 的要求已经通过 'ruby-hmac' 宝石包满足。 - andrewrk

7

我创建了一个辅助工具gem,它是一些sha1代码的简单封装。

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

 => "4659d94e7082a65ca39e7b6725094f08a413250a" 

> "hello world".to_sha1

 => "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed" 

-24

其中的“serialize”是在其他地方定义的某个用户函数。

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

这不是@devstopfix的答案的重复吗? - Andrew Grimm
即使是这样,建议使用的 Ruby 代码非常丑陋,甚至没有提到需要 require \'digest/sha1\''。-1 - Rixius
16
请记住,stackoverflow 的访问量非常庞大,为什么不向我们展示正确的做法呢?少一些批评,多一些代码示例。 - Davidslv
1
这个“serialize”函数是什么?它不是 Ruby 的一部分。更糟糕的是,传递给 hexdigest 的字符串根本不是动态的!无论你给它什么数据,这个方法都会返回相同的哈希值! - Blixxy
2
需要使用SHA1方法,必须添加require 'digest/sha1' - Gus Shortz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接