encriptar con JSP
    
		    Tengo hecho un master detail en Jdeveloper donde se dan de alta a los usuarios que utilizaran un sistema x, el problema es que cuando doy de alta a un usuario quiero encriptar su password cuando se guarde en la BD nadie pueda verlo, 驴como lo hago?, 驴tengo que crear un JSP?, me urge porfavor, GRACIAS
	    
    
		    puedes tambien hacerlo en otros algoritmos mas seguros como lo son 3DES o AES, este ultimo es el mas seguro segun lo que he podido leer, yo tengo uno en 3DES, que lo encripta pero es mas seguro porque, te lo encripta 3 veces, y es mucho mas seguro, primero te lo encripta con el valor de tu aplicacion este valor es fijo y es el q le vas a  dar para todos tus passwords, generandote 1 primer encriptamiento, luego lo encripta a bytes, siendo el segundo encriptamiento, y luego lo encriptas en base64 generandote el 3er encriptamiento, y tambien si quieres ver cual es la clave del modo inverso nomas, no es muy complicado pero si es mas seguro
Saludos
    Saludos
		    Hola !!!
ME Podrias colaborar por fa... necesito realizar ua encriptacion en 3DES pero no lo tengo muy claro...
POR FA !!!
    ME Podrias colaborar por fa... necesito realizar ua encriptacion en 3DES pero no lo tengo muy claro...
POR FA !!!
		    Hola
No hace falta encriptar las contrase帽as. Simplemente, genera un hash MD5 o SHA1 (mejor SHA1, que es m谩s seguro).
Estas funciones hash tienen la particularidad de que son de una sola v铆a: a partir de un texto puedes obtener el c贸digo hash, pero no a la inversa (no es posible obtener el texto a partir del c贸digo hash).
Adem谩s, es virutalmente imposible conseguir dos textos que generen el mismo c贸digo hash.
Otra peculiaridad de este sistema es que los c贸digos hash generados no son texto plano, sino un conjunto arbitrario de bits, eso s铆, de longitud fija.
Para guardarlos en una base de datos, en un campo de tipo texto, conviene darles a estos c贸digo un peque帽o tratamiento, que consiste en transformarlos a BASE64 (que s铆 son caracteres ASCII).
El sistema ser铆a el siguiente:
- En la base de datos guardas no las contrase帽as, sino sus c贸digos MD5 o SHA1 traducidos a BASE64.
- Cuando quieres comprobar un par nombre de usuario - contrase帽a, obtienes el c贸digo MD5 o SHA1 de la contrase帽a, lo pasas a BASE64 y lo comparas con el que tienes almacenado para ese nombre de usuario.
- Si coincide, hasta la cocina: la contrase帽a es correcta.
- Si no coincide, aire.
Te paso el c贸digo fuente de una clase que genera el c贸digo hash SHA1 y lo convierte a BASE64:
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
import sun.misc.CharacterEncoder;
public final class SHA1BASE64 {
public static String encriptar(String textoplano) throws IllegalStateException {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA"); // Instancia de generador SHA-1
}
catch(NoSuchAlgorithmException e) {
throw new IllegalStateException(e.getMessage());
}
try {
md.update(textoplano.getBytes("UTF-8")); // Generaci贸n de resumen de mensaje
}
catch(UnsupportedEncodingException e) {
throw new IllegalStateException(e.getMessage());
}
byte raw[] = md.digest(); // Obtenci贸n del resumen de mensaje
String hash = (new BASE64Encoder()).encode(raw); // Traducci贸n a BASE64
return hash;
}
}
Salud
David
    No hace falta encriptar las contrase帽as. Simplemente, genera un hash MD5 o SHA1 (mejor SHA1, que es m谩s seguro).
Estas funciones hash tienen la particularidad de que son de una sola v铆a: a partir de un texto puedes obtener el c贸digo hash, pero no a la inversa (no es posible obtener el texto a partir del c贸digo hash).
Adem谩s, es virutalmente imposible conseguir dos textos que generen el mismo c贸digo hash.
Otra peculiaridad de este sistema es que los c贸digos hash generados no son texto plano, sino un conjunto arbitrario de bits, eso s铆, de longitud fija.
Para guardarlos en una base de datos, en un campo de tipo texto, conviene darles a estos c贸digo un peque帽o tratamiento, que consiste en transformarlos a BASE64 (que s铆 son caracteres ASCII).
El sistema ser铆a el siguiente:
- En la base de datos guardas no las contrase帽as, sino sus c贸digos MD5 o SHA1 traducidos a BASE64.
- Cuando quieres comprobar un par nombre de usuario - contrase帽a, obtienes el c贸digo MD5 o SHA1 de la contrase帽a, lo pasas a BASE64 y lo comparas con el que tienes almacenado para ese nombre de usuario.
- Si coincide, hasta la cocina: la contrase帽a es correcta.
- Si no coincide, aire.
Te paso el c贸digo fuente de una clase que genera el c贸digo hash SHA1 y lo convierte a BASE64:
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
import sun.misc.CharacterEncoder;
public final class SHA1BASE64 {
public static String encriptar(String textoplano) throws IllegalStateException {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA"); // Instancia de generador SHA-1
}
catch(NoSuchAlgorithmException e) {
throw new IllegalStateException(e.getMessage());
}
try {
md.update(textoplano.getBytes("UTF-8")); // Generaci贸n de resumen de mensaje
}
catch(UnsupportedEncodingException e) {
throw new IllegalStateException(e.getMessage());
}
byte raw[] = md.digest(); // Obtenci贸n del resumen de mensaje
String hash = (new BASE64Encoder()).encode(raw); // Traducci贸n a BASE64
return hash;
}
}
Salud
David
		    David, tengo un login, puedo usar ese codigo para validarlo con mi BD (en la BD los campos de contrase帽a son textos planos.) por favor respondeme, saludos
	    
    
		    Gracias David, tu respuesta es de hace un a帽o, pero me ha venido cojonudo ahora. Gracias a personas como t煤, que facilitan c贸digo, los programadores nos nutrimos y nos facilitamos las cosas no sabes cuanto. He reaprobexao tu c贸digo y le he a帽adio la salida hexadecimal por si alguien lo necesita. Mercy tio.  
package com.kriter.utils;
import sun.misc.BASE64Encoder;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Created by IntelliJ IDEA.
* User: alopez
* Date: 04-jul-2006
* Time: 11:06:38
* To change this template use File | Settings | File Templates.
*/
public final class SHA1
{
public static String encriptarBase64( String textoplano ) throws IllegalStateException
{
MessageDigest md = null;
try
{
md = MessageDigest.getInstance( "SHA" ); // Instancia de generador SHA-1
}
catch( NoSuchAlgorithmException e )
{
throw new IllegalStateException( e.getMessage() );
}
try
{
md.update( textoplano.getBytes( "UTF-8" ) ); // Generaci贸n de resumen de mensaje
}
catch( UnsupportedEncodingException e )
{
throw new IllegalStateException( e.getMessage() );
}
byte raw[] = md.digest(); // Obtenci贸n del resumen de mensaje
return ( new BASE64Encoder() ).encode( raw ); // Traducci贸n a BASE64
}
public static String encriptarHexadecimal( String textoplano ) throws IllegalStateException
{
MessageDigest md = null;
try
{
md = MessageDigest.getInstance( "SHA" ); // Instancia de generador SHA-1
}
catch( NoSuchAlgorithmException e )
{
throw new IllegalStateException( e.getMessage() );
}
try
{
md.update( textoplano.getBytes( "UTF-8" ) ); // Generaci贸n de resumen de mensaje
}
catch( UnsupportedEncodingException e )
{
throw new IllegalStateException( e.getMessage() );
}
byte raw[] = md.digest(); // Obtenci贸n del resumen de mensaje
return toHexadecimal( raw ); // Traducci贸n a HEXADECIMAL
}
//metodo que devuelve el valor hexadecimal (String) de una array de byte.
private static String toHexadecimal( byte[] datos )
{
String resultado = "";
ByteArrayInputStream input = new ByteArrayInputStream( datos );
String cadAux;
int leido = input.read();
while( leido != -1 )
{
cadAux = Integer.toHexString( leido );
if ( cadAux.length() < 2 ) //Hay que a帽adir un 0
resultado += "0";
resultado += cadAux;
leido = input.read();
}
return resultado;
}
}
	    
    package com.kriter.utils;
import sun.misc.BASE64Encoder;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Created by IntelliJ IDEA.
* User: alopez
* Date: 04-jul-2006
* Time: 11:06:38
* To change this template use File | Settings | File Templates.
*/
public final class SHA1
{
public static String encriptarBase64( String textoplano ) throws IllegalStateException
{
MessageDigest md = null;
try
{
md = MessageDigest.getInstance( "SHA" ); // Instancia de generador SHA-1
}
catch( NoSuchAlgorithmException e )
{
throw new IllegalStateException( e.getMessage() );
}
try
{
md.update( textoplano.getBytes( "UTF-8" ) ); // Generaci贸n de resumen de mensaje
}
catch( UnsupportedEncodingException e )
{
throw new IllegalStateException( e.getMessage() );
}
byte raw[] = md.digest(); // Obtenci贸n del resumen de mensaje
return ( new BASE64Encoder() ).encode( raw ); // Traducci贸n a BASE64
}
public static String encriptarHexadecimal( String textoplano ) throws IllegalStateException
{
MessageDigest md = null;
try
{
md = MessageDigest.getInstance( "SHA" ); // Instancia de generador SHA-1
}
catch( NoSuchAlgorithmException e )
{
throw new IllegalStateException( e.getMessage() );
}
try
{
md.update( textoplano.getBytes( "UTF-8" ) ); // Generaci贸n de resumen de mensaje
}
catch( UnsupportedEncodingException e )
{
throw new IllegalStateException( e.getMessage() );
}
byte raw[] = md.digest(); // Obtenci贸n del resumen de mensaje
return toHexadecimal( raw ); // Traducci贸n a HEXADECIMAL
}
//metodo que devuelve el valor hexadecimal (String) de una array de byte.
private static String toHexadecimal( byte[] datos )
{
String resultado = "";
ByteArrayInputStream input = new ByteArrayInputStream( datos );
String cadAux;
int leido = input.read();
while( leido != -1 )
{
cadAux = Integer.toHexString( leido );
if ( cadAux.length() < 2 ) //Hay que a帽adir un 0
resultado += "0";
resultado += cadAux;
leido = input.read();
}
return resultado;
}
}
