Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > Java (Servlets y JSP) > encriptar con JSP
-Foros de debate

Java (Servlets y JSP)
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

encriptar con JSP
Enviado por Estrella el día 30 de marzo de 2005

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

 
Re: encriptar con JSP
Enviado por David el día 1 de abril de 2005

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

 
Re: Re: encriptar con JSP
Enviado por Javier el día 30 de mayo de 2005

Muy bueno, me funciono, gracias :)

 

Re: Re: encriptar con JSP
Enviado por peghe el día 31 de mayo de 2005

a mi tambien me sirvio!! gracias!!

 

Re: Re: encriptar con JSP
Enviado por Magus el día 8 de junio de 2005

Cual es el tamaño maximo del string que devuelve la funcion encriptar ????

 

Gracias
Enviado por oscar el día 10 de agosto de 2005

Gracias por el codigo que dejaste, yo tenia otro, pero el problema que me daba era un error algo de Jasper, busque todo tipo de codigos, intente con el tuyo y da bien. Gracias

 
Re: Gracias
Enviado por Luciano el día 6 de septiembre de 2005

Tengo que agradecerte por haber puesto un codigo tan bueno a disposicion de todos la verdad es que con este tipo de cosas se ahorra mucho tiempo en proyectos grandes. te felicito sos un ejemplo para el resto de los programadores... sigan asi...

 
Re: Re: Gracias
Enviado por MikiBroki el día 10 de octubre de 2005

muchísimas gracias !

Me también a la pregunta sobre el tamaño de la cadena encriptada

 
Pregunta?
Enviado por Hernando el día 31 de enero de 2006

Hola, mi pregunta es porque cuando ingreso otro texto me genera el mismo hash, asi el texto sea diferente?

 
Re: Pregunta?
Enviado por elbirsoy el día 25 de abril de 2006

Muchas gracias me ha parecido muy util

 





Re: Re: encriptar con JSP
Enviado por develoPERU el día 9 de mayo de 2006

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

 

Re: Re: encriptar con JSP
Enviado por Manotas el día 29 de junio de 2006

GRACIAS, ME AYUDO MUCHO, BARRRBARO

 

encriptar con JSP (mejorado)
Enviado por alopez el día 4 de julio de 2006

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;
}
}

 


Re: encriptar con JSP
Enviado por adolfuz el día 5 de julio de 2006

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

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network