Digest::Base

所有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

方法:

dup
clone

生成摘要对象的拷贝。

digest

以字符串形式返回对应于当前字符串的哈希表值。在MD5中是16字节,在SHA1以及RMD160中是20字节,在SHA256中是32字节,在SHA384中是48字节,在SHA512中是64字节。

hexdigest
to_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值作比较。 具体与哪个值进行比较要看所给字符串的长度而定。