Chiffrement des données en code personnalisé avec EncryptionFactory

EncryptionFactory est une classe de fabrique qui initialise l'ensemble des classes du fournisseur de chiffrement qui sont utilisées au moment de l'exécution pour chiffrer et déchiffrer les données. Tous les fournisseurs de chiffrement doivent implémenter l'interface com.ibm.commerce.foundation.common.util.encryption.EncryptionProvider.

Voici les fournisseurs de chiffrement que vous pouvez utiliser pour le chiffrement ou le déchiffrement des données :
  • ActiveProvider : ce fournisseur est chargé de chiffrer et déchiffrer les données sensibles qui doivent être stockées dans la base de données. Par exemple, des numéros de carte de crédit. La clé de chiffrement est la clé de commerçant.
  • SessionProvider : ce fournisseur est chargé de chiffrer et déchiffrer les données visibles de façon externe, comme les valeurs contenues par un cookie. La clé de chiffrement est la clé de session.
Pour extraire un fournisseur de chiffrement spécifique, appelez la méthode suivante :
EncryptionFactory.getInstance().getProvider("name of provider")
Pour chiffrer les données qui utilisent le fournisseur de chiffrement, appelez la méthode encrypt(). Par exemple, pour chiffrer les données à stocker dans la base de données, utilisez ActiveProvider (clé de commerçant) :
com.ibm.commerce.foundation.common.util.encryption.EncryptionFactory.getInstance()
.getProvider(com.ibm.commerce.server.ECConstants.EC_ENCRYPTION_ACTIVEPROVIDER)
.encrypt("myDataToEncrypt");

Le diagramme d'interaction suivant explique la manière dont un composant chiffre les données confidentielles :

  • Le composant demande d'abord à EncryptionFactory de renvoyer une instance de EncryptionProvider en fonction du nom du fournisseur. Par exemple, ActiveProvider.
  • Le composant appelle la méthode de chiffrement sur le fournisseur en transmettant les données en texte en clair.
  • Le fournisseur appelle d'abord le WCKeyRegistry pour récupérer la clé : la nouvelle clé si elle existe, sinon la clé en cours avec le numéro de version le plus élevé. Cette clé est utilisée pour chiffrer les données en texte en clair. Les données chiffrées sont alors renvoyées au composant.
De même, pour déchiffrer les données qui utilisent un fournisseur de chiffrement, appelez la méthode decrypt(). Par exemple, pour déchiffrer des données de la base de données, utilisez ActiveProvider (clé de commerçant) :
com.ibm.commerce.foundation.common.util.encryption.EncryptionFactory.getInstance()
.getProvider(com.ibm.commerce.server.ECConstants.EC_ENCRYPTION_ACTIVEPROVIDER)
.decrypt("myEncryptedData");
Le diagramme d'interaction suivant explique la manière dont un composant déchiffre les données :
  • Le composant demande d'abord à EncryptionFactory de renvoyer une instance de EncryptionProvider en fonction d'un nom.
  • Le composant appelle la méthode de déchiffrement sur le fournisseur en transmettant les données chiffrées.
  • Le fournisseur détermine la version de la clé qui a été utilisée pour chiffrer les données en analysant le suffixe en texte en clair. Ensuite, il appelle WCKeyRegistry pour extraire la clé avec la même version. Enfin, il appelle le module de chiffrement pour déchiffrer les données qui utilisent la clé.
Remarque : Si vous utilisez EncryptionFactory dans un environnement de ligne de commande et que vous utilisez Key Locator Framework, le code suivant est nécessaire avant d'appeler l'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 );
       }