我正在按照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
最佳答案
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
只是基础,“扩展”了