JasyptCrypt.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.utils.crypt;

  21. import org.openspcoop2.utils.UtilsException;
  22. import org.openspcoop2.utils.random.RandomGenerator;
  23. import org.slf4j.Logger;

  24. /**
  25.  * JasyptCrypt
  26.  *
  27.  * @author Poli Andrea (apoli@link.it)
  28.  * @author $Author$
  29.  * @version $Rev$, $Date$
  30.  */
  31. public class JasyptCrypt implements ICrypt {

  32.     private Logger log;
  33.     private JasyptType type;
  34.     private CryptConfig config;
  35.     private RandomGenerator randomGenerator;
  36.     private JasyptCustomSaltGenerator customSaltGenerator;
  37.    
  38.     public JasyptCrypt(JasyptType type){
  39.         this.type = type;
  40.         if(this.type == null) {
  41.             this.type = JasyptType.JASYPT_STRONG_PASSWORD;
  42.         }
  43.     }
  44.    
  45.     public JasyptCrypt(){
  46.     }
  47.    
  48.     @Override
  49.     public void init(Logger log, CryptConfig config) {
  50.         this.log = log;
  51.        
  52.         if(this.type==null) {
  53.             this.config = config;
  54.             if(this.config == null) {
  55.                 this.config = new CryptConfig();
  56.             }
  57.            
  58.             this.randomGenerator = new RandomGenerator(this.config.isUseSecureRandom(), this.config.getAlgorithmSecureRandom());
  59.             this.customSaltGenerator = new JasyptCustomSaltGenerator(this.randomGenerator);
  60.         }
  61.     }
  62.    
  63.     public JasyptCustomSaltGenerator getCustomSaltGenerator() {
  64.         return this.customSaltGenerator;
  65.     }
  66.    
  67.     @Override
  68.     public String crypt(String password) throws UtilsException {
  69.        
  70.         if(this.type!=null) {
  71.             switch (this.type) {
  72.             case JASYPT_BASIC_PASSWORD:{
  73.                 org.jasypt.util.password.BasicPasswordEncryptor basicEncryptor = new org.jasypt.util.password.BasicPasswordEncryptor();
  74.                 return basicEncryptor.encryptPassword(password);
  75.             }
  76.             case JASYPT_STRONG_PASSWORD:{
  77.                 org.jasypt.util.password.StrongPasswordEncryptor strongEncryptor = new org.jasypt.util.password.StrongPasswordEncryptor();
  78.                 return strongEncryptor.encryptPassword(password);
  79.             }
  80.             case RFC2307_MD5:{
  81.                 org.jasypt.util.password.rfc2307.RFC2307MD5PasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307MD5PasswordEncryptor();
  82.                 return rfcEncryptor.encryptPassword(password);
  83.             }
  84.             case RFC2307_SMD5:{
  85.                 org.jasypt.util.password.rfc2307.RFC2307SMD5PasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307SMD5PasswordEncryptor();
  86.                 return rfcEncryptor.encryptPassword(password);
  87.             }
  88.             case RFC2307_SHA:{
  89.                 org.jasypt.util.password.rfc2307.RFC2307SHAPasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307SHAPasswordEncryptor();
  90.                 return rfcEncryptor.encryptPassword(password);
  91.             }
  92.             case RFC2307_SSHA:{
  93.                 org.jasypt.util.password.rfc2307.RFC2307SSHAPasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307SSHAPasswordEncryptor();
  94.                 return rfcEncryptor.encryptPassword(password);
  95.             }
  96.             }
  97.             throw new UtilsException("Unsupported type '"+this.type+"'");
  98.         }
  99.         else {
  100.             org.jasypt.util.password.ConfigurablePasswordEncryptor configurablePasswordEncryptor = _getConfigurablePasswordEncryptor();
  101.             return configurablePasswordEncryptor.encryptPassword(password);
  102.         }
  103.        
  104.     }
  105.    
  106.     @Override
  107.     public boolean check(String password, String pwcrypt) {
  108.         try {
  109.             if(this.type!=null) {
  110.                 switch (this.type) {
  111.                 case JASYPT_BASIC_PASSWORD:{
  112.                     org.jasypt.util.password.BasicPasswordEncryptor basicEncryptor = new org.jasypt.util.password.BasicPasswordEncryptor();
  113.                     return basicEncryptor.checkPassword(password, pwcrypt);
  114.                 }
  115.                 case JASYPT_STRONG_PASSWORD:{
  116.                     org.jasypt.util.password.StrongPasswordEncryptor strongEncryptor = new org.jasypt.util.password.StrongPasswordEncryptor();
  117.                     return strongEncryptor.checkPassword(password, pwcrypt);
  118.                 }
  119.                 case RFC2307_MD5:{
  120.                     org.jasypt.util.password.rfc2307.RFC2307MD5PasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307MD5PasswordEncryptor();
  121.                     return rfcEncryptor.checkPassword(password, pwcrypt);
  122.                 }
  123.                 case RFC2307_SMD5:{
  124.                     org.jasypt.util.password.rfc2307.RFC2307SMD5PasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307SMD5PasswordEncryptor();
  125.                     return rfcEncryptor.checkPassword(password, pwcrypt);
  126.                 }
  127.                 case RFC2307_SHA:{
  128.                     org.jasypt.util.password.rfc2307.RFC2307SHAPasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307SHAPasswordEncryptor();
  129.                     return rfcEncryptor.checkPassword(password, pwcrypt);
  130.                 }
  131.                 case RFC2307_SSHA:{
  132.                     org.jasypt.util.password.rfc2307.RFC2307SSHAPasswordEncryptor rfcEncryptor = new org.jasypt.util.password.rfc2307.RFC2307SSHAPasswordEncryptor();
  133.                     return rfcEncryptor.checkPassword(password, pwcrypt);
  134.                 }
  135.                 }
  136.                 throw new RuntimeException("Unsupported type '"+this.type+"'");
  137.             }
  138.             else {
  139.                 org.jasypt.util.password.ConfigurablePasswordEncryptor configurablePasswordEncryptor = _getConfigurablePasswordEncryptor();
  140.                 return configurablePasswordEncryptor.checkPassword(password, pwcrypt);
  141.             }
  142.         }catch(Throwable e){
  143.             if(this.log!=null) {
  144.                 this.log.error("Verifica password '"+pwcrypt+"' fallita: "+e.getMessage(),e);
  145.             }
  146.             return false;
  147.         }
  148.     }

  149.     private org.jasypt.util.password.ConfigurablePasswordEncryptor _getConfigurablePasswordEncryptor() {
  150.         org.jasypt.util.password.ConfigurablePasswordEncryptor configurablePasswordEncryptor = new org.jasypt.util.password.ConfigurablePasswordEncryptor();    
  151.         JasyptCustomDigesterConfig config = new JasyptCustomDigesterConfig(this.config, this.customSaltGenerator);
  152.         configurablePasswordEncryptor.setConfig(config);
  153.         configurablePasswordEncryptor.setStringOutputType(this.config.isUseBase64Encoding() ? "BASE64" : "hexadecimal");
  154.         configurablePasswordEncryptor.setAlgorithm(config.getAlgorithm());
  155.         return configurablePasswordEncryptor;
  156.     }
  157. }