A ColdBox module for BCrypt. You can ready more about BCrypt here:
- The module is designed for ColdBox 4.X applications and up.
A compiled version (0.3) of jBCrypt is included in the models/lib
directory. You can update the version by following the steps below.
- Download jBCrypt from http://www.mindrot.org/projects/jBCrypt/.
- Compile
BCrypt.java
to a.class
file namedBCrypt.class
. - Package
BCrypt.class
into a jar file namedBCrypt.jar
.
Download the BCrypt module and place it in your modules
folder. Even easier, is isntall via CommandBox and this will also isntall the required JavaLoader module as well
box install bcrypt
This module will automatically register a model called BCrypt@BCrypt
that you inject via WireBox injection DSL:
property name="BCrypt" inject="BCrypt@BCrypt";
or via getModel()
inside your handlers, views, interceptors, etc.
getModel( "BCrypt@BCrypt" )
BCrypt is best used to hash passwords only. It's too slow (the point) to use as a simple digest. It's not reversible, so it's not suitable for encrypting transmission data.
The hashed password should be persisted so candidate passwords (submitted from login) can be checked against.
var hashedPassword = getModel( "BCrypt@BCrypt" ).hashPassword( plaintextPassword );
The plaintextPasswordCandidate
is the password the user submits for authentication. The hashed password is retrieved for the user being authenticated.
var isSamePassword = getModel( "BCrypt@BCrypt" ).checkPassword( plaintextPasswordCandidate, hashedPassword );
WorkFactor
is an input to BCrypt that controls how long (generally) it takes to hash a password. The module sets a default value of 12
. You should experiment to find the optimal value for your environment. It should take as long as possible to hash a password without being burdensome to your users on login. Half a second to a full second is generally a good target to shoot for.
You can also set the workFactor on a per-call basis by passing it in as a second parameter to the hashPassword
method like so:
var hashedPassword = getModel( "BCrypt@BCrypt" ).hashPassword( plaintextPassword, 7 );
You may override the default work factor by creating a BCrypt
settings struct in your ColdBox.cfc
. The available settings can be found below:
BCrypt = {
workFactor = 12
};