📄 base.pm
字号:
package Digest::base;use strict;use vars qw($VERSION);$VERSION = "1.00";# subclass is supposed to implement at least thesesub new;sub clone;sub add;sub digest;sub reset { my $self = shift; $self->new(@_); # ugly}sub addfile { my ($self, $handle) = @_; my $n; my $buf = ""; while (($n = read($handle, $buf, 4*1024))) { $self->add($buf); } unless (defined $n) { require Carp; Carp::croak("Read failed: $!"); } $self;}sub add_bits { my $self = shift; my $bits; my $nbits; if (@_ == 1) { my $arg = shift; $bits = pack("B*", $arg); $nbits = length($arg); } else { ($bits, $nbits) = @_; } if (($nbits % 8) != 0) { require Carp; Carp::croak("Number of bits must be multiple of 8 for this algorithm"); } return $self->add(substr($bits, 0, $nbits/8));}sub hexdigest { my $self = shift; return unpack("H*", $self->digest(@_));}sub b64digest { my $self = shift; require MIME::Base64; my $b64 = MIME::Base64::encode($self->digest(@_), ""); $b64 =~ s/=+$//; return $b64;}1;__END__=head1 NAMEDigest::base - Digest base class=head1 SYNOPSIS package Digest::Foo; use base 'Digest::base';=head1 DESCRIPTIONThe C<Digest::base> class provide implementations of the methodsC<addfile> and C<add_bits> in terms of C<add>, and of the methodsC<hexdigest> and C<b64digest> in terms of C<digest>.Digest implementations might want to inherit from this class to getthis implementations of the alternative I<add> and I<digest> methods.A minimal subclass needs to implement the following methods by itself: new clone add digestThe arguments and expected behaviour of these methods are described inL<Digest>.=head1 SEE ALSOL<Digest>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -