sábado, 22 de enero de 2011

Encriptar una cadena con SHA1 en JAVA y PHP

Hola a todos, hoy tengo preparado una pequeña utilidad para proteger vuestras cadenas de texto, por lo general las contraseñas de una aplicación web o de escritorio.

Es una forma muy simple utilizando SHA1

en JAVA necesitariamos implementar una nueva clase que la denominaremos SHA1 con el siguiente código:


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

public class SHA1 {
    private MessageDigest md;
    private byte[] buffer, digest;
    private String hash = "";

    public String getHash(String message) throws NoSuchAlgorithmException {
        buffer = message.getBytes();
        md = MessageDigest.getInstance("SHA1");
        md.update(buffer);
        digest = md.digest();

        for(byte aux : digest) {
            int b = aux & 0xff;
            if (Integer.toHexString(b).length() == 1) hash += "0";
            hash += Integer.toHexString(b);
        }
     return hash;}
}

una vez echo esto, para poder usarla en nuestra aplicación podemos crear un método similar a este:


public String cript(String pass){
SHA1 s = new SHA1();
String basura="rwr24t5yt25y543td32ty6";
        try {
            return s.getHash(s.getHash(pass+basura)+basura);
        }
        catch(NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

    return "0";}

El método encripta la contraseña que le pasemos y por seguridad e implementado una variable "basura"(cadena de texto aleatorio) la cual la añado en la misma cadena para encriptar y para liar aun mas vuelvo a encriptar el resultado mas la cadena "basura" para mayor dificultad por si se da el caso de recibir algún tipo de ataque. Cuanto mas complejo sea mayor dificultad para que esta clave sea rota. También tener en cuenta que limite de almacenamiento tenemos ya que si una cadena en SHA1 tiene como longitud mínima de 40 caracteres si volvemos a encriptarlo incrementará en otros 40 caracteres mas.

En PHP es mucho mas sencillo solo tenemos que realizar lo siguiente:
$basura="r3eyu675632wy53u74";
$passEncriptada = sha1(sha1($passAencriptar+$basura)+basura);

Espero que os ayude en algo.