package com.FitBank.crypt;

import java.security.MessageDigest;

/**
 * Clase que se encarga de encriptar claves en algoritmo MD5.
 */
public class MD5Password {

    /**
     * Metodo que devuelve clave encriptada en algoritmo diferido.
     * 
     * @param clearTextPassword String Valor de clave.
     * 
     * @return String clave encriptada.
     * 
     * @throws Exception Excepcion Generica.
     */
    public static String getEncodedPassword(String clearTextPassword) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(clearTextPassword.getBytes());

        return HexString.bufferToHex(md.digest());
    }

    /**
     * Metodo que compara clave abierta con clave encriptada.
     * 
     * @param clearTextTestPassword String Valor de clave.
     * @param encodedActualPassword String HASH(Clave encriptada).
     * 
     * @return boolean resultado de comparacion.
     * 
     * @throws Exception Excepcion Generica.
     */
    public static boolean testPassword(String clearTextTestPassword, String encodedActualPassword) throws Exception {
        String encodedTestPassword = MD5Password.getEncodedPassword(clearTextTestPassword);

        return encodedTestPassword.equals(encodedActualPassword);
    }

    /**
     * Metodo que devuelve misma clave (en caso cuando no se utiliza ningun algoritmo de encriptacion.
     * 
     * @param clearTextPassword String Valor de clave.
     * 
     * @return String Valor de clave.
     */
    public String getWithOutCrypt(String clearTextPassword) {

    	return clearTextPassword;
    }

}
