Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Authen:...D5Crypt(3)  User Contributed Perl Documentation Authen:...D5Crypt(3)

NAME
       Authen::Passphrase::MD5Crypt - passphrases using	the MD5-based Unix
       crypt()

SYNOPSIS
	       use Authen::Passphrase::MD5Crypt;

	       $ppr = Authen::Passphrase::MD5Crypt->new(
			       salt => "Vd3f8aG6",
			       hash_base64 => "GcsdF4YCXb0PM2UmXjIoI1");

	       $ppr = Authen::Passphrase::MD5Crypt->new(
			       salt_random => 1,
			       passphrase => "passphrase");

	       $ppr = Authen::Passphrase::MD5Crypt->from_crypt(
		       '$1$Vd3f8aG6$GcsdF4YCXb0PM2UmXjIoI1');

	       $ppr = Authen::Passphrase::MD5Crypt->from_rfc2307(
		       '{CRYPT}$1$Vd3f8aG6$GcsdF4YCXb0PM2UmXjIoI1');

	       $salt = $ppr->salt;
	       $hash_base64 = $ppr->hash_base64;

	       if($ppr->match($passphrase)) { ...

	       $passwd = $ppr->as_crypt;
	       $userPassword = $ppr->as_rfc2307;

DESCRIPTION
       An object of this class encapsulates a passphrase hashed	using the
       MD5-based Unix crypt() hash function.  This is a	subclass of
       Authen::Passphrase, and this document assumes that the reader is
       familiar	with the documentation for that	class.

       The crypt() function in a modern	Unix actually supports several
       different passphrase schemes.  This class is concerned only with	one
       particular scheme, an MD5-based algorithm designed by Poul-Henning Kamp
       and originally implemented in FreeBSD.  To handle the whole range of
       passphrase schemes supported by the modern crypt(), see the from_crypt
       constructor and the as_crypt method in Authen::Passphrase.

       The MD5-based crypt() scheme uses the whole passphrase, a salt which
       can in principle	be an arbitrary	byte string, and the MD5 message
       digest algorithm.  First	the passphrase and salt	are hashed together,
       yielding	an MD5 message digest.	Then a new digest is constructed,
       hashing together	the passphrase,	the salt, and the first	digest,	all in
       a rather	complex	form.  Then this digest	is passed through a thousand
       iterations of a function	which rehashes it together with	the passphrase
       and salt	in a manner that varies	between	rounds.	 The output of the
       last of these rounds is the resulting passphrase	hash.

       In the crypt() function the raw hash output is then represented in
       ASCII as	a 22-character string using a base 64 encoding.	 The base 64
       digits are ".", "/", "0"	to "9",	"A" to "Z", "a"	to "z" (in ASCII
       order).	Because	the base 64 encoding can represent 132 bits in 22
       digits, more than the 128 required, the last digit can only take	four
       of the base 64 digit values.  An	additional complication	is that	the
       bytes of	the raw	algorithm output are permuted in a bizarre order
       before being represented	in base	64.

       There is	no tradition of	handling these passphrase hashes in raw	binary
       form.  The textual encoding described above, including the final
       permutation, is used universally, so this class does not	support	any
       binary format.

       The complex algorithm was designed to be	slow to	compute, in order to
       resist brute force attacks.  However, the complexity is fixed, and the
       operation of Moore's Law	has rendered it	far less expensive than
       intended.  If efficiency	of a brute force attack	is a concern, see
       Authen::Passphrase::BlowfishCrypt.

CONSTRUCTORS
       Authen::Passphrase::MD5Crypt->new(ATTR => VALUE,	...)
	   Generates a new passphrase recogniser object	using the MD5-based
	   crypt() algorithm.  The following attributes	may be given:

	   salt
	       The salt, as a raw string.  It may be any byte string, but in
	       crypt() usage it	is conventionally limited to zero to eight
	       base 64 digits.

	   salt_random
	       Causes salt to be generated randomly.  The value	given for this
	       attribute is ignored.  The salt will be a string	of eight base
	       64 digits.  The source of randomness may	be controlled by the
	       facility	described in Data::Entropy.

	   hash_base64
	       The hash, as a string of	22 base	64 digits.  This is the	final
	       part of what crypt() outputs.

	   passphrase
	       A passphrase that will be accepted.

	   The salt must be given, and either the hash or the passphrase.

       Authen::Passphrase::MD5Crypt->from_crypt(PASSWD)
	   Generates a new passphrase recogniser object	using the MD5-based
	   crypt() algorithm, from a crypt string.  The	crypt string must
	   consist of "$1$", the salt, "$", then 22 base 64 digits giving the
	   hash.  The salt may be up to	8 characters long, and cannot contain
	   "$" or any character	that cannot appear in a	crypt string.

       Authen::Passphrase::MD5Crypt->from_rfc2307(USERPASSWORD)
	   Generates a new passphrase recogniser object	using the MD5-based
	   crypt() algorithm, from an RFC 2307 string.	The string must
	   consist of "{CRYPT}"	(case insensitive) followed by an acceptable
	   crypt string.

METHODS
       $ppr->salt
	   Returns the salt, in	raw form.

       $ppr->hash_base64
	   Returns the hash value, as a	string of 22 base 64 digits.

       $ppr->match(PASSPHRASE)
       $ppr->as_crypt
       $ppr->as_rfc2307
	   These methods are part of the standard Authen::Passphrase
	   interface.  Not every passphrase recogniser of this type can	be
	   represented as a crypt string: the crypt format only	allows the
	   salt	to be up to eight bytes, and it	cannot contain any NUL or "$"
	   characters.

SEE ALSO
       Authen::Passphrase, Crypt::PasswdMD5

AUTHOR
       Andrew Main (Zefram) <zefram@fysh.org>

COPYRIGHT
       Copyright (C) 2006, 2007, 2009, 2010, 2012 Andrew Main (Zefram)
       <zefram@fysh.org>

LICENSE
       This module is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.

perl v5.42.0			  2026-02-26		  Authen:...D5Crypt(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=Authen::Passphrase::MD5Crypt&sektion=3&manpath=FreeBSD+15.0-RELEASE+and+Ports.quarterly>

home | help