Class HibernatePBEStringEncryptor

Object
org.jasypt.hibernate5.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), setIvGenerator(IvGenerator), 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, ivGenerator 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.9.0
Author:
Chus Picos