md5crypt(3) MD5-based password encryption


package require Tcl 8.2

package require md5 2.0

package require md5crypt ?1.1.0?

::md5crypt::md5crypt password salt

::md5crypt::aprcrypt password salt

::md5crypt::salt ?length?


This package provides an implementation of the MD5-crypt password encryption algorithm as pioneered by FreeBSD and currently in use as a replacement for the unix crypt(3) function in many modern systems. An implementation of the closely related Apache MD5-crypt is also available. The output of these commands are compatible with the BSD and OpenSSL implementation of md5crypt and the Apache 2 htpasswd program.


::md5crypt::md5crypt password salt
Generate a BSD compatible md5-encoded password hash from the plaintext password and a random salt (see SALT).
::md5crypt::aprcrypt password salt
Generate an Apache compatible md5-encoded password hash from the plaintext password and a random salt (see SALT).
::md5crypt::salt ?length?
Generate a random salt string suitable for use with the md5crypt and aprcrypt commands.


The salt passed to either of the encryption schemes implemented here is checked to see if it begins with the encryption scheme magic string (either "$1$" for MD5-crypt or "$apr1$" for Apache crypt). If so, this is removed. The remaining characters up to the next $ and up to a maximum of 8 characters are then used as the salt. The salt text should probably be restricted the set of ASCII alphanumeric characters plus "./" (dot and forward-slash) - this is to preserve maximum compatability with the unix password file format.

If a password is being generated rather than checked from a password file then the salt command may be used to generate a random salt.


% md5crypt::md5crypt password 01234567
% md5crypt::aprcrypt password 01234567
% md5crypt::md5crypt password [md5crypt::salt]


This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category md5crypt of the Tcllib Trackers []. Please also report any ideas for enhancements you may have for either package and/or documentation.


hashing, md5, md5crypt, message-digest, security


Hashes, checksums, and encryption


Copyright (c) 2003, Pat Thoyts <[email protected]>