Cifrado de datos en código personalizado utilizando EncryptionFactory

EncryptionFactory es una clase de fábrica que inicializa todas las clases de proveedor de cifrado que se utilizan en tiempo de ejecución para cifrar y descifrar datos. Todos los proveedores de cifrado deben implementar la interfaz com.ibm.commerce.foundation.common.util.encryption.EncryptionProvider.

A continuación se indican los proveedores de cifrado que pueden utilizarse para cifrar y descifrar datos:
  • ActiveProvider: Este proveedor es responsable de cifrar y descifrar datos confidenciales que se deben almacenar en la base de datos, por ejemplo, los números de tarjeta de crédito. La clave de cifrado es la clave de comerciante.
  • SessionProvider: Este proveedor es responsable de cifrar y descifrar datos públicos externos, tales como los valores de un cookie. La clave de cifrado es la clave de sesión.
Para recuperar un proveedor de cifrado en particular, invoque este método:
EncryptionFactory.getInstance().getProvider("name of provider")
Para cifrar los datos que utilizan un proveedor de cifrado, llame al método encrypt(). Por ejemplo, para cifrar los datos para almacenarlos en la base de datos, utilice ActiveProvider (clave de comerciante):
com.ibm.commerce.foundation.common.util.encryption.EncryptionFactory.getInstance()
.getProvider(com.ibm.commerce.server.ECConstants.EC_ENCRYPTION_ACTIVEPROVIDER)
.encrypt("myDataToEncrypt");

En el siguiente diagrama de interacción se describe cómo un componente cifra datos sensibles:

  • El componente llama primero a EncryptionFactory para devolver una instancia de EncryptionProvider según el nombre del proveedor, por ejemplo, ActiveProvider.
  • El componente invoca el método de cifrado del proveedor pasando los datos de texto sin formato.
  • El proveedor llama primero a WCKeyRegistry para recuperar la clave: La clave nueva, si existe, o la clave actual con la versión que tenga el número más alto. Esta clave se utiliza para cifrar los datos de texto sin formato. A continuación, los datos cifrados se devolverán al componente.
De forma parecida, para cifrar los datos que utilizan un proveedor de cifrado, llame al método encrypt(). Por ejemplo, para cifrar los datos de la base de datos, utilice ActiveProvider (clave de comerciante):
com.ibm.commerce.foundation.common.util.encryption.EncryptionFactory.getInstance()
.getProvider(com.ibm.commerce.server.ECConstants.EC_ENCRYPTION_ACTIVEPROVIDER)
.decrypt("myEncryptedData");
El siguiente diagrama de interacciones muestra cómo descifra los datos un componente:
  • El componente primero llama a EncryptionFactory para devolver una instancia del EncryptionProvider según un nombre determinado.
  • El componente llama al método de descifrado del proveedor pasando los datos cifrados.
  • El proveedor determina la versión de la clave que se ha utilizado para cifrar los datos analizando el sufijo de texto sin formato. Luego llama a WCKeyRegistry para recuperar la clave con la misma versión. Por último, llama al módulo de cifrado para descifrar los datos que utilizan la clave.
Nota: Si está utilizando EncryptionFactory en un entorno de línea de comandos y está utilizando Key Locator Framework, entonces se necesita el siguiente código antes de llamar a la API EncryptionFactory.
System.setProperty("newKeyNeeded", "true");
       com.ibm.commerce.security.keys.WCKeyRegistry keyRegistry = com.ibm.commerce.security.keys.WCKeyRegistry.getInstance();
       if (!keyRegistry.isInitialized()) {
             keyRegistry.initFromXMLFile( pathToCustomKeysFile );
       }