【问题标题】:Where does Digest::SHA2.hexdigest() defined?Digest::SHA2.hexdigest() 定义在哪里?
【发布时间】:2011-01-13 22:17:35
【问题描述】:

我正在阅读Agile Web Development with Rails 一书中的教程,我发现了以下代码:

def User.encrypt_password(password, salt) 
  Digest::SHA2.hexdigest(password + "wibble" + salt)
end

查看Digest 源代码(我的ruby 安装中lib 目录中的digest.rbdigest/sha2.rb),但是,我似乎找不到hexdigest 方法的定义位置,但是但代码似乎运行良好。

有人能告诉我这是怎么发生的吗?我假设我需要寻找一个看起来像这样的代码:

def hexdigest(...)
   ...
end

【问题讨论】:

    标签: ruby-on-rails ruby sha digest


    【解决方案1】:

    hexdigest 部分和其他几个类似的方法被编写为 C 扩展以提高速度。它位于 Ruby 源代码的 ext/digest/ 中。

    static VALUE rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self) 在我的 Ruby 1.9.2-p0 源代码的 ext/digest/digest.c 的第 216 行定义。它只是调用了一堆其他函数,但至少它可能是一个起点。

    对于 SHA2,还有另一个 ext/digest/sha2/sha2.c 包含这些函数。 digest.c 只是基础,由其他“扩展”

    【讨论】:

      【解决方案2】:

      根据http://ruby-doc.org/stdlib/libdoc/digest/rdoc/classes/Digest/Class.html

      Digest 在digest.rb 和digest.c 中实现(原生方法)。我相信这里发生的是 hexdigest 是 Digest::SHA2 继承的 Digest 上的一个类方法。 hexdigest的实现调用每个digest类型实现的digest类方法并返回结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 2015-07-09
        • 2016-03-22
        相关资源
        最近更新 更多