【问题标题】:How do I create a SHA1 hash in ruby?如何在 ruby​​ 中创建 SHA1 哈希?
【发布时间】:2010-09-07 06:18:27
【问题描述】:

【问题讨论】:

  • SHA-1 已被证明是不安全的。考虑使用更安全的替代方案,例如 SHA-256 或 SHA-3。 shattered.io

标签: ruby hash sha1


【解决方案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
    • 别忘了stackoverflow有太多的访问者,你为什么不告诉我们正确的方法呢?更少的批评者更多的代码示例
    • 这个“序列化”功能是什么?这不是红宝石的一部分。更糟糕的是,传递给 hexdigest 的字符串根本不是动态的!无论您提供什么数据,此方法都会返回相同的哈希值!
    • 需要require 'digest/sha1' 才能使用SHA1 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2011-11-20
    • 2010-12-04
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多