org.jasypt.hibernate.encryptor
Class HibernatePBEStringEncryptor

Object
  extended by org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor

public final class HibernatePBEStringEncryptor
extends Object

Placeholder class for PBEStringEncryptor objects which are eligible for use from Hibernate.

This class acts as a wrapper on a PBEStringEncryptor, allowing to be set a registered name (see setRegisteredName(String)) and performing the needed registry operations against the HibernatePBEEncryptorRegistry.

It is not mandatory that a PBEStringEncryptor be explicitly set with setEncryptor(PBEStringEncryptor). If not, a StandardPBEStringEncryptor object will be created internally and it will be configurable with the setPassword(String)/setPasswordCharArray(char[]), setAlgorithm(String), setKeyObtentionIterations(int), setSaltGenerator(SaltGenerator), setProviderName(String), setProvider(Provider), setStringOutputType(String) and setConfig(PBEConfig) methods.

This class is mainly intended for use from Spring Framework or some other IoC container (if you are not using a container of this kind, please see HibernatePBEEncryptorRegistry). The steps to be performed are the following:

  1. Create an object of this class (declaring it).
  2. Set its registeredName and, either its wrapped encryptor or its password, algorithm, keyObtentionIterations, saltGenerator and config properties.
  3. Declare a typedef in a Hibernate mapping giving its encryptorRegisteredName parameter the same value specified to this object in registeredName.

This in a Spring config file would look like:

  ...
  <-- Optional, as the hibernateEncryptor could be directly set an     -->
  <-- algorithm and password.                                          -->
  <bean id="stringEncryptor"
    class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
    <property name="algorithm">
        <value>PBEWithMD5AndDES</value>
    </property>
    <property name="password">
        <value>XXXXX</value>
    </property>
  </bean>
  
  <bean id="hibernateEncryptor"
    class="org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor">
    <property name="registeredName">
        <value>myHibernateStringEncryptor</value>
    </property>
    <property name="encryptor">
        <ref bean="stringEncryptor" />
    </property>
  </bean>
  ...
 

And then in the Hibernate mapping file:

    <typedef name="encrypted" class="org.jasypt.hibernate.type.EncryptedStringType">
      <param name="encryptorRegisteredName">myHibernateStringEncryptor</param>
    </typedef>
 

An important thing to note is that, when using HibernatePBEStringEncryptor objects this way to wrap PBEStringEncryptors, it is not necessary to deal with HibernatePBEEncryptorRegistry, because HibernatePBEStringEncryptor objects get automatically registered in the encryptor registry when their setRegisteredName(String) method is called.

Since:
1.2 (substitutes org.jasypt.hibernate.HibernatePBEEncryptor which existed since 1.0)
Author:
Daniel Fernández

Constructor Summary
HibernatePBEStringEncryptor()
          Creates a new instance of HibernatePBEStringEncryptor.
 
Method Summary
 String decrypt(String encryptedMessage)
          Decypts a message, delegating to wrapped encryptor
 String encrypt(String message)
          Encrypts a message, delegating to wrapped encryptor.
 PBEStringEncryptor getEncryptor()
          Returns the encryptor which this object wraps.
 String getRegisteredName()
          Returns the name with which the wrapped encryptor is registered at the registry.
 void setAlgorithm(String algorithm)
          Sets the algorithm to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 void setConfig(PBEConfig config)
          Sets the PBEConfig to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 void setEncryptor(PBEStringEncryptor encryptor)
          Sets the PBEStringEncryptor to be held (wrapped) by this object.
 void setKeyObtentionIterations(int keyObtentionIterations)
          Sets the key obtention iterations to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 void setPassword(String password)
          Sets the password to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 void setPasswordCharArray(char[] password)
          Sets the password to be used by the internal encryptor (as a char[]), if a specific encryptor has not been set with setEncryptor(...).
 void setProvider(Provider provider)
          Sets the JCE provider to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 void setProviderName(String providerName)
          Sets the name of the JCE provider to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 void setRegisteredName(String registeredName)
          Sets the registered name of the encryptor and adds it to the registry.
 void setSaltGenerator(SaltGenerator saltGenerator)
          Sets the salt generator to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 void setStringOutputType(String stringOutputType)
          Sets the type of String output ("base64" (default), "hexadecimal") to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).
 
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

HibernatePBEStringEncryptor

public HibernatePBEStringEncryptor()
Creates a new instance of HibernatePBEStringEncryptor. It also creates a StandardPBEStringEncryptor for internal use, which can be overriden by calling setEncryptor(...).

Method Detail

getEncryptor

public PBEStringEncryptor getEncryptor()
Returns the encryptor which this object wraps.

Returns:
the encryptor.

setEncryptor

public void setEncryptor(PBEStringEncryptor encryptor)
Sets the PBEStringEncryptor to be held (wrapped) by this object. This method is optional and can be only called once.

Parameters:
encryptor - the encryptor.

setPassword

public void setPassword(String password)
Sets the password to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
password - the password to be set for the internal encryptor

setPasswordCharArray

public void setPasswordCharArray(char[] password)
Sets the password to be used by the internal encryptor (as a char[]), if a specific encryptor has not been set with setEncryptor(...).

Parameters:
password - the password to be set for the internal encryptor
Since:
1.8

setAlgorithm

public void setAlgorithm(String algorithm)
Sets the algorithm to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
algorithm - the algorithm to be set for the internal encryptor

setKeyObtentionIterations

public void setKeyObtentionIterations(int keyObtentionIterations)
Sets the key obtention iterations to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
keyObtentionIterations - to be set for the internal encryptor

setSaltGenerator

public void setSaltGenerator(SaltGenerator saltGenerator)
Sets the salt generator to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
saltGenerator - the salt generator to be set for the internal encryptor.

setProviderName

public void setProviderName(String providerName)
Sets the name of the JCE provider to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
providerName - the name of the JCE provider (already registered)
Since:
1.3

setProvider

public void setProvider(Provider provider)
Sets the JCE provider to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
provider - the JCE provider to be used
Since:
1.3

setStringOutputType

public void setStringOutputType(String stringOutputType)
Sets the type of String output ("base64" (default), "hexadecimal") to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
stringOutputType - the type of String output
Since:
1.3

setConfig

public void setConfig(PBEConfig config)
Sets the PBEConfig to be used by the internal encryptor, if a specific encryptor has not been set with setEncryptor(...).

Parameters:
config - the PBEConfig to be set for the internal encryptor

encrypt

public String encrypt(String message)
Encrypts a message, delegating to wrapped encryptor.

Parameters:
message - the message to be encrypted.
Returns:
the encryption result.

decrypt

public String decrypt(String encryptedMessage)
Decypts a message, delegating to wrapped encryptor

Parameters:
encryptedMessage - the message to be decrypted.
Returns:
the result of decryption.

setRegisteredName

public void setRegisteredName(String registeredName)
Sets the registered name of the encryptor and adds it to the registry.

Parameters:
registeredName - the name with which the encryptor will be registered.

getRegisteredName

public String getRegisteredName()
Returns the name with which the wrapped encryptor is registered at the registry.

Returns:
the registered name.


Copyright © 2011 The JASYPT team. All Rights Reserved.