NAME
    App::bmkpasswd - bcrypt-capable mkpasswd(1) and exported helpers
SYNOPSIS
      ## From Perl:
      use App::bmkpasswd 'mkpasswd', 'passwdcmp';
      my $bcrypted = mkpasswd($passwd);
      say 'matched' if passwdcmp($passwd, $bcrypted);
      ## From a shell:
      bmkpasswd --help
  
      # Generate bcrypted passwords
      # Defaults to work cost factor '08':
      bmkpasswd
      bmkpasswd --workcost='06'
      # SHA requires Crypt::Passwd::XS or glibc2.7+
      bmkpasswd --method='sha512'
  
      # Compare a hash:
      bmkpasswd --check=HASH
      # Check hash generation times:
      bmkpasswd --benchmark
DESCRIPTION
    App::bmkpasswd is a simple bcrypt-enabled mkpasswd. (Helper functions
    are also exported for use in other applications; see "EXPORTED".)
    See "bmkpasswd --help" for usage information.
    Uses Crypt::Eksblowfish::Bcrypt for bcrypted passwords. Bcrypt hashes
    come with a configurable work-cost factor; that allows hash generation
    to become configurably slower as computers get faster, thereby impeding
    brute-force hash generation attempts.
    See  for more on
    why you ought to be using bcrypt or similar "adaptive" techniques.
    SHA-256 and SHA-512 are supported if available. You'll need either
    Crypt::Passwd::XS or a system crypt() that can handle SHA, such as
    glibc-2.7+ or newer FreeBSD builds.
    Uses Bytes::Random::Secure to generate random salts.
EXPORTED
    You can use the exported mkpasswd and passwdcmp functions in other Perl
    modules/applications:
      use App::bmkpasswd qw/mkpasswd passwdcmp/;
  mkpasswd
      ## Generate a bcrypted passwd with work-cost 08:
      $bcrypted = mkpasswd($passwd);
      ## Generate a bcrypted passwd with other work-cost:
      $bcrypted = mkpasswd($passwd, 'bcrypt', '06');
      ## SHA:
      $crypted = mkpasswd($passwd, 'sha256');
      $crypted = mkpasswd($passwd, 'sha512');
      ## Use a strongly-random salt (requires spare entropy):
      $crypted = mkpasswd($passwd, 'bcrypt', '08', 'strong');
      $crypted = mkpasswd($passwd, 'sha512', 0, 'strong');
  passwdcmp
      ## Compare a password against a hash
      ## passwdcmp() will return the hash if it is a match
      if ( passwdcmp($passwd, $hash) ) {
        ## Successful match
      } else {
        ## Failed match
      }
BUGS
    There is currently no easy way to pass your own salt; frankly, this
    thing is aimed at some projects of mine where that issue is unlikely to
    come up and randomized is appropriate. If that's a problem, patches
    welcome? ;-)
AUTHOR
    Jon Portnoy