CriptoUtil.java 2.73 KB
package br.gov.mc.cadsei.util;



import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public final class CriptoUtil {

    private static final String hexDigits = "0123456789abcdef";
    /**
    * Realiza um digest em um array de bytes através do algoritmo especificado
    * @param input - O array de bytes a ser criptografado
    * @param algoritmo - O algoritmo a ser utilizado
    * @return byte[] - O resultado da criptografia
    * @throws NoSuchAlgorithmException - Caso o algoritmo fornecido não seja
    * válido
    */
    private static byte[] digest(byte[] input, String algoritmo)
        throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance(algoritmo);
        md.reset();
        return md.digest(input);
    }

    /**
     * Converte o array de bytes em uma representação hexadecimal.
     * @param input - O array de bytes a ser convertido.
     * @return Uma String com a representação hexa do array
     */
    private static String byteArrayToHexString(byte[] b) {
        StringBuffer buf = new StringBuffer();

        for (int i = 0; i < b.length; i++) {
            int j = ((int) b[i]) & 0xFF; 
            buf.append(hexDigits.charAt(j / 16)); 
            buf.append(hexDigits.charAt(j % 16)); 
        }
     
        return buf.toString();
    }

    /**
     * Converte uma String hexa no array de bytes correspondente.
     * @param hexa - A String hexa
     * @return O vetor de bytes
     * @throws IllegalArgumentException - Caso a String não sej auma
     * representação haxadecimal válida
     */
    @SuppressWarnings("unused")
	private static byte[] hexStringToByteArray(String hexa)
        throws IllegalArgumentException {

        //verifica se a String possui uma quantidade par de elementos
        if (hexa.length() % 2 != 0) {
            throw new IllegalArgumentException("String hexa inválida"); 
        }

        byte[] b = new byte[hexa.length() / 2];

        for (int i = 0; i < hexa.length(); i+=2) {
            b[i / 2] = (byte) ((hexDigits.indexOf(hexa.charAt(i)) << 4) |
                (hexDigits.indexOf(hexa.charAt(i + 1)))); 
        }
        return b;
    }
    
    public static String getCriptografia(String palavra){
    	
    	String resultado = null;
    	
    	try{
    		
    		byte[] input = palavra.getBytes();
    		
			byte[] b = digest(input, "md5");
	
			return CriptoUtil.byteArrayToHexString(b);
    		
    	}catch(Exception e){
			System.out.println(e.toString());
    	}
    	
    	return resultado;
    }
    
    public static void main(String[] args) throws NoSuchAlgorithmException {
	System.out.println( CriptoUtil.byteArrayToHexString(CriptoUtil.digest(
			"c508a02b4b3ff383f8d8dea0e1e5596d".getBytes(), "md5")));
    }
}