如何在 ruby 中创建 SHA1 哈希?
Posted
技术标签:
【中文标题】如何在 ruby 中创建 SHA1 哈希?【英文标题】:How do I create a SHA1 hash in ruby? 【发布时间】:2010-09-07 06:18:27 【问题描述】:SHA Hash functions
【问题讨论】:
SHA-1 已被证明是不安全的。考虑使用更安全的替代方案,例如 SHA-256 或 SHA-3。 shattered.io 【参考方案1】:require 'digest/sha1'
Digest::SHA1.hexdigest 'foo'
【讨论】:
还有Digest::SHA1.base64digest 'foo'
仅供参考:Digest
是 Ruby 标准库 (ruby-doc.org/stdlib-1.9.2/libdoc/digest/rdoc/index.html) 的一部分。它包括 SHA1、SHA2、MD5 和其他哈希算法的实现。
仅供参考,您现在应该使用Digest::SHA2.hexdigest
,因为它更安全并且(尚未)被发现有任何冲突。【参考方案2】:
对于 Base64 编码的哈希,为了验证 Oauth 签名,我使用了
require 'base64'
require 'hmac-sha1'
Base64.encode64((HMAC::SHA1.new('key') << 'base').digest).strip
【讨论】:
仅供参考,宝石“ruby-hmac”满足“hmac-sha1”要求【参考方案3】:我创建了一个帮助器 gem,它是一些 sha1 代码的简单包装器
require 'rickshaw'
> Rickshaw::SHA1.hash('LICENSE.txt')
=> "4659d94e7082a65ca39e7b6725094f08a413250a"
> "hello world".to_sha1
=> "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
【讨论】:
【参考方案4】:“序列化”是在别处定义的一些用户函数。
def generateKey(data)
return Digest::SHA1.hexdigest ("#serialize(data)")
end
【讨论】:
这不是@devstopfix 的答案的重复吗? 即使是这样,它也是一些非常丑陋的 ruby 代码,甚至没有提到它需要 `require \'digest/sha1\'' -1 别忘了***有太多的访问者,你为什么不告诉我们正确的方法呢?更少的批评者更多的代码示例 这个“序列化”功能是什么?这不是红宝石的一部分。更糟糕的是,传递给 hexdigest 的字符串根本不是动态的!无论您提供什么数据,此方法都会返回相同的哈希值! 需要require 'digest/sha1'
才能使用SHA1
方法。以上是关于如何在 ruby 中创建 SHA1 哈希?的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中匹配 128 个字符的密码哈希 - 使用 Ruby on Rails 加密