36 lines
794 B
Perl
36 lines
794 B
Perl
#!/usr/local/bin/perl
|
|
|
|
use MD5;
|
|
|
|
#
|
|
# twdigest -- format MD5 digest like TripWire does
|
|
#
|
|
# This converts the md5->digest binary string to
|
|
# 64-radix ascii, given the base-vector:
|
|
# 0 - 9, A - Z, a - z, :, .
|
|
#
|
|
|
|
sub twdigest {
|
|
my($digest) = @_;
|
|
my(@chunks, $bits);
|
|
|
|
# Convert to ASCII bit-string
|
|
$bits = unpack("B*", $digest);
|
|
|
|
# Round up length to multiple of 6 by prepending zeros
|
|
$bits = ("0" x ((6 - (length($bits) % 6)) % 6)) . $bits;
|
|
|
|
# Split into 6-bit chunks
|
|
@chunks = grep {$_ ne ''} (split(/(.{6})/, $bits, -1));
|
|
|
|
# Convert each 6-bit value to a single character
|
|
foreach (@chunks)
|
|
{
|
|
$_ = pack("B8", "00" . $_);
|
|
tr/\000-\011\012-\043\044-\075\076\077/0-9A-Za-z:./;
|
|
}
|
|
|
|
# Join all of the chunks into one string
|
|
join('', @chunks);
|
|
}
|