Я писал более расширенный с инсталом и админкой, а также с выбором уровня шифровки мд5. А crypt() не использовал.