Digest :: SHA2.hexdigest()在哪里定义?

时间:2011-01-13 22:17:35

标签: ruby-on-rails ruby sha digest

我正在完成本书Agile Web Development with Rails中的教程,并找到了以下代码:

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

然而,查看我的ruby安装中Digest目录中的digest.rb源代码(digest/sha2.rblib),我似乎无法找到hexdigest方法已定义,但代码似乎工作正常。

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

def hexdigest(...)
   ...
end

2 个答案:

答案 0 :(得分:8)

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只是基础知识,由其他人“扩展”

答案 1 :(得分:1)

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

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