我正在完成本书Agile Web Development with Rails中的教程,并找到了以下代码:
def User.encrypt_password(password, salt)
Digest::SHA2.hexdigest(password + "wibble" + salt)
end
然而,查看我的ruby安装中Digest
目录中的digest.rb
源代码(digest/sha2.rb
和lib
),我似乎无法找到hexdigest
方法已定义,但代码似乎工作正常。
有人可以告诉我这是怎么发生的吗?我假设我需要寻找一个看起来像的代码:
def hexdigest(...)
...
end
答案 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类方法,每个摘要类型实现并返回结果。