Package org.magicbox.util

Source Code of org.magicbox.util.Cripto

/*
* Copyright Massimiliano Dess� (desmax74@yahoo.it)
*
* Licensed under Apache License Version 2.0
* (http://www.apache.org/licenses/LICENSE-2.0),
*
* for commercial use, under
* GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*/
package org.magicbox.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Logger;

/**
* Classe di utilit� di Criptazione
*
* @author Massimiliano Dess� (desmax74@yahoo.it)
* @since jdk 1.6.0
* @version 3.0
*/
public class Cripto {

    /**
     * Genera Hash da una Stringa
     *
     * @param String
     * @return String
     */
    public static String generaHash(String testo) {
        String hash = null;
        try {
            String control = testo + String.valueOf(System.currentTimeMillis());
            hash = new String(cripta(control.toCharArray()));
        } catch (Exception ex) {
            Logger log = Logger.getLogger("Cripto");
            log.severe("Eccezione in genera Hash:" + ex.getMessage());
        }
        return hash;
    }

    /**
     * Converte un array di byte in un array di caratteri contenente una rappresentazione esadecimale stampabile dei bytes. Ciascun byte dell'array sorgente contribuisce con una coppia di byte
     * dell'array restituito.
     *
     * @param src l'array sorgente
     * @return array di caratteri contenente una versione stampabile dell'array sorgente
     */

    private static char[] hexDump(byte src[]) {
        char buf[] = new char[src.length * 2];
        for (int b = 0; b < src.length; b++) {
            String byt = Integer.toHexString((int) src[b] & 0xFF);
            if (byt.length() < 2) {
                buf[b * 2 + 0] = '0';
                buf[b * 2 + 1] = byt.charAt(0);
            } else {
                buf[b * 2 + 0] = byt.charAt(0);
                buf[b * 2 + 1] = byt.charAt(1);
            }
        }
        return buf;
    }

    /**
     * Azzera il contenuto dell'array specificato. Usato tipicamente per cancellare la memorizzazione provvisoria della password di accesso in modo che non venga lasciata da qualche parte nella
     * memoria.
     *
     * @param pwd array della password da azzerare
     */
    private static void smudge(byte pwd[]) {
        if (null != pwd) {
            for (int b = 0; b < pwd.length; b++) {
                pwd[b] = 0;
            }
        }
    }

    /**
     * Effettua SHA hashing sulla password fornita e restituisce un array di char che contiene contenere la password cifrata come stringa stampabile. L'hash � calcolato sugli 8 bit di livello basso
     * di ogni character.
     *
     * @param pwd La password da cifrare
     * @return array di 32 char contenente MD5 hashing della password
     * @exception Exception Description of the Exception
     */
    private static char[] cripta(char pwd[]) throws Exception {
        if (null == md) {
            md = MessageDigest.getInstance(ALGORITHM_SHA);
        }
        md.reset();
        byte pwdb[] = new byte[pwd.length];
        for (int b = 0; b < pwd.length; b++) {
            pwdb[b] = (byte) pwd[b];
        }
        char crypt[] = hexDump(md.digest(pwdb));
        smudge(pwdb);
        return crypt;
    }

    /**
     * Effettua SHA su una Stringa
     *
     * @param String
     * @return String
     */
    public static String stringToSHA(String buffer) {
        try {
            MessageDigest shaDigest = MessageDigest.getInstance(ALGORITHM_SHA);
            byte[] mybytes = buffer.getBytes();
            byte[] byteResult = shaDigest.digest(mybytes);
            String result = bytesToHex(byteResult);
            return result;
        } catch (NoSuchAlgorithmException md5ex) {
        }

        return null;
    }

    /**
     * Effettua MD5 su una Stringa
     *
     * @param String
     * @return String
     */
    public static String stringToMD5(String buffer) {
        try {
            MessageDigest digest1 = MessageDigest.getInstance(ALGORITHM_MD5);
            byte[] mybytes = buffer.getBytes();
            byte[] byteResult = digest1.digest(mybytes);
            String result = bytesToHex(byteResult);
            return result;
        } catch (NoSuchAlgorithmException md5ex) {
        }

        return null;
    }

    // Conversione da Byte a Hex
    private static String bytesToHex(byte[] b) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < b.length; ++i) {
            sb.append((Integer.toHexString((b[i] & 0xFF) | 0x100)).substring(1, 3));
        }
        return sb.toString();
    }

    private final static String ALGORITHM_SHA = "SHA-1";
    private final static String ALGORITHM_MD5 = "MD5";
    private static MessageDigest md = null;
}
TOP

Related Classes of org.magicbox.util.Cripto

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.