所有Digest::XXX类的底层类。
例如, 可以像下面这样得到MD5值。
require 'digest/md5'
p Digest::MD5.hexdigest(File.read("ruby-1.8.0.tar.gz"))
# => "582a65e52598a4a1e9fce523e16e67d6"
或者(该方法不会生成大字符串)
require 'digest/md5'
class Digest::Base
def self.open(path)
obj = new
File.open(path) {|f|
buf = ""
while f.read(256, buf)
obj << buf
end
}
obj
end
end
p Digest::MD5.open("ruby-1.8.0.tar.gz").hexdigest
# => "582a65e52598a4a1e9fce523e16e67d6"
所有的Digest::XXX类都具有下列相同的接口。
Digest::Base.new([str])生成新的摘要对象. 若给出了字符串参数时, 就将它添加进去(请参考update )。
Digest::Base.digest(str)以字符串形式返回对应于所给字符串的哈希表值. 这等价于new(str).digest。
Digest::Base.hexdigest(str)使用ASCII代码,把对应于所给字符串的哈希表值编码为16进制形式的字符串. 这等价于new(str).hexdigest。
dupclone生成摘要对象的拷贝。
digest以字符串形式返回对应于当前字符串的哈希表值。在MD5中是16字节,在SHA1以及RMD160中是20字节,在SHA256中是32字节,在SHA384中是48字节,在SHA512中是64字节。
hexdigestto_s使用ASCII代码,将对应于当前字符串的哈希表值编码为16进制形式的字符串。在MD5中是32字节,在SHA1以及RMD160中是40字节,在SHA256中是64字节,在SHA384中是96字节,在SHA\512中是128字节。若用ruby来写的话,就是
def hexdigest
digest.unpack("H*")[0]
end
update(str)self << str追加字符串。多次调用update的效果 与 先连接字符串然后一次性地调用update的效果是一样的. 也就是说, m.update(a); m.update(b) 等同于 m.update(a + b) , m << a << b 等同于 m << a + b 。
self == md与所给摘要对象进行比较。
self == str将所给字符串与digest值或hexdigest值作比较。 具体与哪个值进行比较要看所给字符串的长度而定。