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.javato a.classfile namedBCrypt.class. - Package
BCrypt.classinto 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 bcryptThis 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
};