Crypt::Digest(3)

✨ NAME ✨

Crypt::Digest β€” Generic interface to hash/digest functions. Yep bestie, this is the Crypt::Digest(3) manual page, living in the User Contributed Perl Documentation section, and it's literally your friendly little gateway to a whole lineup of hash/digest algorithms. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

Okay so here's the vibe check β€” functional interface first, then the OO era. Copy-paste responsibly, bestie. ✨

### Functional interface:
use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u
                      digest_file digest_file_hex digest_file_b64 digest_file_b64u );

my $data = 'data string';
my $filename = 'filename.dat';
open my $filehandle, '<:raw', $filename or die "cannot open $filename: $!";

# calculate digest from string/buffer
my $digest_raw  = digest_data('SHA256', $data);
my $digest_hex  = digest_data_hex('SHA256', $data);
my $digest_b64  = digest_data_b64('SHA256', $data);
my $digest_b64u = digest_data_b64u('SHA256', $data);
# calculate digest from file
my $file_digest_raw  = digest_file('SHA256', $filename);
my $file_digest_hex  = digest_file_hex('SHA256', $filename);
my $file_digest_b64  = digest_file_b64('SHA256', $filename);
my $file_digest_b64u = digest_file_b64u('SHA256', $filename);
# calculate digest from filehandle
my $fh_digest_raw  = digest_file('SHA256', $filehandle);

### OO interface:
use Crypt::Digest;

my $d = Crypt::Digest->new('SHA1');
$d->add('any data');
$d->addfile('filename.dat');
$d->addfile($filehandle);
my $result_raw  = $d->digest;     # raw bytes
my $result_hex  = $d->hexdigest;  # hexadecimal form
my $result_b64  = $d->b64digest;  # Base64 form
my $result_b64u = $d->b64udigest; # Base64 URL-safe form

πŸ’– DESCRIPTION πŸ’–

Provides an interface to various hash/digest algorithms. That's the whole main-character energy of this module, fr fr. 🌸

All functions and methods return raw bytes unless the method name explicitly ends in _hex, _b64, or _b64u β€” those ones give you the encoded form instead. And no cap: invalid algorithm names croak. Like, immediately. πŸ’€


πŸŽ€ EXPORT πŸŽ€

Nothing is exported by default. Lowkey respectful of your namespace. 🫢

You can export selected functions:

use Crypt::Digest qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u
                      digest_file digest_file_hex digest_file_b64 digest_file_b64u );

Or all of them at once:

use Crypt::Digest ':all';

πŸ¦‹ FUNCTIONS πŸ¦‹

All functions take the algorithm name as the first argument. Supported values are:

 'CHAES', 'MD2', 'MD4', 'MD5', 'RIPEMD128', 'RIPEMD160',
 'RIPEMD256', 'RIPEMD320', 'SHA1', 'SHA224', 'SHA256',
 'SHA384', 'SHA512', 'SHA512_224', 'SHA512_256', 'Tiger192', 'Whirlpool',
 'SHA3_224', 'SHA3_256', 'SHA3_384', 'SHA3_512',
 'Keccak224', 'Keccak256', 'Keccak384', 'Keccak512',
 'BLAKE2b_160', 'BLAKE2b_256', 'BLAKE2b_384', 'BLAKE2b_512',
 'BLAKE2s_128', 'BLAKE2s_160', 'BLAKE2s_224', 'BLAKE2s_256'

Or literally any <NAME> for which there is a Crypt::Digest::<NAME> module. Slay. ✨

πŸ’« digest_data

Joins all arguments into a single string and returns the digest for the selected algorithm encoded as a binary string. 🫢

Data arguments are converted to byte strings using Perl's usual scalar stringification. Defined scalars, including numbers and string-overloaded objects, are accepted. undef is treated as an empty string and may emit Perl's usual "uninitialized value" warning. The same rules apply to digest_data_hex, digest_data_b64, and digest_data_b64u.

my $digest_raw = digest_data('SHA256', 'data string');
#or
my $digest_raw = digest_data('SHA256', 'any data', 'more data', 'even more data');

🌸 digest_data_hex

Joins all arguments into a single string and returns the digest for the selected algorithm encoded as a hexadecimal string. Iconic hex behavior, no notes. πŸ’œ

my $digest_hex = digest_data_hex('SHA256', 'data string');
#or
my $digest_hex = digest_data_hex('SHA256', 'any data', 'more data', 'even more data');

πŸŽ€ digest_data_b64

Joins all arguments into a single string and returns the digest for the selected algorithm encoded as a Base64 string, with trailing = padding. Cute, padded, ready for the group chat. πŸŽ€

my $digest_b64 = digest_data_b64('SHA256', 'data string');
#or
my $digest_b64 = digest_data_b64('SHA256', 'any data', 'more data', 'even more data');

πŸ¦‹ digest_data_b64u

Joins all arguments into a single string and returns the digest for the selected algorithm encoded as a Base64 URL-safe string (see RFC 4648 section 5). URL-safe and unbothered. 🌈

my $digest_b64url = digest_data_b64u('SHA256', 'data string');
#or
my $digest_b64url = digest_data_b64u('SHA256', 'any data', 'more data', 'even more data');

πŸ“ digest_file

Reads a file given by a filename or filehandle and returns its digest encoded as a binary string. File vibes only. πŸ“

my $digest_raw = digest_file('SHA256', 'filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $digest_raw = digest_file('SHA256', $filehandle);

🧚 digest_file_hex

Reads a file given by a filename or filehandle and returns its digest encoded as a hexadecimal string.

my $digest_hex = digest_file_hex('SHA256', 'filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $digest_hex = digest_file_hex('SHA256', $filehandle);
Note: The filehandle must be in binary mode before you pass it to addfile().

πŸ’œ digest_file_b64

Reads a file given by a filename or filehandle and returns its digest encoded as a Base64 string, with trailing = padding. Bestie, keep that padding. πŸŽ€

my $digest_b64 = digest_file_b64('SHA256', 'filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $digest_b64 = digest_file_b64('SHA256', $filehandle);

πŸ”₯ digest_file_b64u

Reads a file given by a filename or filehandle and returns its digest encoded as a Base64 URL-safe string (see RFC 4648 section 5). URL-safe and fully main character. ✨

my $digest_b64url = digest_file_b64u('SHA256', 'filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $digest_b64url = digest_file_b64u('SHA256', $filehandle);

🧚 METHODS 🧚

Unless noted otherwise, assume $d is an existing digest object created via new, for example:

my $d = Crypt::Digest->new('SHA256');

πŸ‘‘ new

Constructor, returns a reference to the digest object. It's giving "born to digest, forced to compute." πŸ‘‘

my $d = Crypt::Digest->new($name);
# $name could be: 'CHAES', 'MD2', 'MD4', 'MD5', 'RIPEMD128', 'RIPEMD160',
#                 'RIPEMD256', 'RIPEMD320', 'SHA1', 'SHA224', 'SHA256', 'SHA384',
#                 'SHA512', 'SHA512_224', 'SHA512_256', 'SHA3_224', 'SHA3_256',
#                 'SHA3_384', 'SHA3_512', 'Keccak224', 'Keccak256', 'Keccak384',
#                 'Keccak512', 'BLAKE2b_160', 'BLAKE2b_256', 'BLAKE2b_384',
#                 'BLAKE2b_512', 'BLAKE2s_128', 'BLAKE2s_160', 'BLAKE2s_224',
#                 'BLAKE2s_256', 'Tiger192', 'Whirlpool'
#
# or any <FUNCNAME> for which there is a Crypt::Digest::<FUNCNAME> module

πŸ¦‹ clone

Creates a copy of the digest object state and returns a reference to the copy. Twin energy. 🫢

$d->clone();

🌸 reset

Resets the digest object state and returns the digest object itself. A little refresh, a little rebrand. ✨

$d->reset();

πŸ’… add

Appends all arguments to the message. Returns the digest object itself. Chainable and cunty, as it should be. πŸ’…

Each argument is converted to bytes using Perl's usual scalar stringification. Defined scalars, including numbers and string-overloaded objects, are accepted. undef is treated as an empty string and may emit Perl's usual "uninitialized value" warning.

$d->add('any data');
#or
$d->add('any data', 'more data', 'even more data');

Note that all the following cases are equivalent:

# case 1
$d->add('aa', 'bb', 'cc');

# case 2
$d->add('aa');
$d->add('bb');
$d->add('cc');

# case 3
$d->add('aabbcc');

# case 4
$d->add('aa')->add('bb')->add('cc');

πŸ“ addfile

Reads a file or filehandle and appends its content to the message. Returns the digest object itself. Very "feed me files, bestie." πŸ“

$d->addfile('filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
$d->addfile($filehandle);
Note: The filehandle must be in binary mode before you pass it to addfile().

🌈 hashsize

Returns the length of calculated digest in bytes (e.g. 32 for SHA-256). Size check, but make it digest. πŸ”₯

$d->hashsize;
#or
Crypt::Digest->hashsize('SHA1');
#or
Crypt::Digest::hashsize('SHA1');

⭐ digest

Returns the binary digest (raw bytes). The first call finalizes the digest object. Any later add(), addfile(), digest(), hexdigest(), b64digest(), or b64udigest() call will fail until you call reset(). So yeah, that finalization is permanent until you reset β€” no take-backs. 😭

my $result_raw = $d->digest();

πŸ’œ hexdigest

Returns the digest encoded as a hexadecimal string. Like digest(), the first call finalizes the digest object.

my $result_hex = $d->hexdigest();

πŸŽ€ b64digest

Returns the digest encoded as a Base64 string with trailing = padding. Note: This padding style might differ from other "Digest::*" modules on CPAN. Like digest(), the first call finalizes the digest object.

my $result_b64 = $d->b64digest();

✨ b64udigest

Returns the digest encoded as a Base64 URL-safe string (see RFC 4648 section 5). Like digest(), the first call finalizes the digest object.

my $result_b64url = $d->b64udigest();

🫢 SEE ALSO 🫢

  • CryptX
  • Crypt::Digest tries to be compatible with the Digest interface.
  • Check subclasses like Crypt::Digest::SHA1, Crypt::Digest::MD5, ...

πŸŽ€ That's the whole page, bestie! Footer deets for the record: perl v5.42.0, dated 2026-05-11, and this iconic little manual is Crypt::Digest(3). Bye, love you, stay hashed. πŸ’–
πŸ“¦ where this page comes from