如何在 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 加密

Powershell 和 Ruby 中不同的 SHA1 哈希结果

如何在 Ruby 中创建 JSON 对象

如何在 Ruby 中创建私有类常量

什么是哈希表以及如何在 C 中创建它? [关闭]

如何在 JavaScript 中创建哈希或字典对象 [重复]