Codificar y Decodificar texto

89 views
Skip to first unread message

NiCkEl

unread,
Sep 22, 2008, 11:30:58 AM9/22/08
to javamaniaco
Hola a todos, alguien tiene alguna idea de si existe alguna clase para
codificar y decodifiar texto en java, estube mirando la clase
MessageDigest pero lamentablemente al codificar se pierde información
como para decodificar y obtener el mensaje original. Necesito esto por
seguridad ya que necesito codificar un archivo de texto plano que
contiene información confidencial, si alguien tiene algun aporte se
les agradece, gracias.

saludos
NiCkEl

Gabriel Ernesto Gutierrez Añez

unread,
Sep 23, 2008, 9:51:35 AM9/23/08
to javam...@googlegroups.com
No se mucho, hace un tiempo estuve leyendo sobre encriptacion de datos, segun tengo entendido el MessageDigest es para Hashing, el Hashing es diferente de la encriptacion, la encriptacion puede ser desencriptada en base a alguna llave publica o privada (es como un password), y el Hashing en teoria no puede ser regresado a su forma original, pq en teoria? el mas comun es el MD5, pero un profesor creo q de japon o de los lados de asia encontro una forma de generar MD5 iguales con una cadena de originacion diferente, el mejor hasta el momento sigue siendo SHA-1. los hashin se basan en que una palabra de cualquier tamaño puede ser representada en 32 o 64 (no muy seguro del 64, quizas y hasta mas) caracteres y dicha palabra va a ser unica.

Para encriptacion puedes usar tu propio algoritmo, o puedes consultar los que ya estan realizados y decidir cual usar. La implementacion de los algoritmos ya realizados es algo complicada, te recomiendo que busques algun componente que lo haga.

En este link hay informacion sobre la criptografia o encriptacion o codificacion (como quieras llamarle)

http://es.wikipedia.org/wiki/Criptograf%C3%ADa

Al final hay una lista de los algoritmos creados y protocolos de seguridad.

Saludos, espero te ayude.

2008/9/22 NiCkEl <nickelso...@gmail.com>



--
Ing. Gabriel Gutiérrez
Towa Software
Lider Tecnico de Aplicaciones J2EE
Brainbench Certified Java Server Pages
Sun Certified Java Developer
Sun Certified Java Programmer
(0052) (1) (811) 582-5670
Monterrey, México

NiCkEl

unread,
Sep 23, 2008, 12:11:15 PM9/23/08
to javamaniaco
Hola Gabriel, gracias por tu pronta respuesta. Voy a mirar la info que
enviaste, tambien encontre JCE (Jaca Criptography Exntension) que uno
puede elegir tb entre metodos de ecnriptación como SHA-1 y MD5, haber
si puedo implementar algun metodo de encriptación ya implementado,
tambien encontre por ahi el Blowfish otro metodo de encriptación.
Cuando logre algo haber si lo cuelgo aqui.

saludos
NiCkEl

On 23 sep, 09:51, "Gabriel Ernesto Gutierrez Añez"
<gutierrez...@gmail.com> wrote:
> No se mucho, hace un tiempo estuve leyendo sobre encriptacion de datos,
> segun tengo entendido el MessageDigest es para Hashing, el Hashing es
> diferente de la encriptacion, la encriptacion puede ser desencriptada en
> base a alguna llave publica o privada (es como un password), y el Hashing en
> teoria no puede ser regresado a su forma original, pq en teoria? el mas
> comun es el MD5, pero un profesor creo q de japon o de los lados de asia
> encontro una forma de generar MD5 iguales con una cadena de originacion
> diferente, el mejor hasta el momento sigue siendo SHA-1. los hashin se basan
> en que una palabra de cualquier tamaño puede ser representada en 32 o 64 (no
> muy seguro del 64, quizas y hasta mas) caracteres y dicha palabra va a ser
> unica.
>
> Para encriptacion puedes usar tu propio algoritmo, o puedes consultar los
> que ya estan realizados y decidir cual usar. La implementacion de los
> algoritmos ya realizados es algo complicada, te recomiendo que busques algun
> componente que lo haga.
>
> En este link hay informacion sobre la criptografia o encriptacion o
> codificacion (como quieras llamarle)
>
> http://es.wikipedia.org/wiki/Criptograf%C3%ADa
>
> Al final hay una lista de los algoritmos creados y protocolos de seguridad.
>
> Saludos, espero te ayude.
>
> 2008/9/22 NiCkEl <nickelsolucio...@gmail.com>

luis angel arias machado

unread,
Sep 23, 2008, 12:20:02 PM9/23/08
to javam...@googlegroups.com
Hola amigo al parecer me llego este correo por ekivocacion porke yo no pregunte eso,
mi pregunta era ¿como graficar un caracter en JAVA pixel por pixel usando el metodo SetPixel?
si me puedes ayudar te lo agradeceria...


Date: Tue, 23 Sep 2008 08:51:35 -0500
From: gutier...@gmail.com
To: javam...@googlegroups.com
Subject: Re: Codificar y Decodificar texto

Madonna, Avril Lavigne, Maroon 5 y muchos más, En Vivo, sólo por Prodigy/MSN en concierto.

Gabriel Ernesto Gutierrez Añez

unread,
Sep 23, 2008, 1:02:23 PM9/23/08
to javam...@googlegroups.com
Esta bien, el blowfish lo lei en aquel entonces, creo que es uno de los mejores que hay, pero eso de SHA-1 y MD5 para encriptar se me hace raro, ya que se basan en hashing, pero bueh, en ese mundo no ando muy metido hehehe, quizas y alguien pueda dar alguna informacion mas concreta de esos mecanismos de hashing.

Saludos,

2008/9/23 NiCkEl <nickelso...@gmail.com>

Gabriel Ernesto Gutierrez Añez

unread,
Sep 23, 2008, 1:09:18 PM9/23/08
to javam...@googlegroups.com
Luis,

Si te llego el mensaje es debido a que al momento de registrarte pediste que cada mensaje que se postee, te llegue a tu correo, para graficar un caracter con el setPixel, no te sabria decir mucho, investigue en google y me abrio un API
donde dice que ese metodo existe para esta clase javax.media.jai.iterator.WritableRandomIter, la cual es algo avanzada en cuestiones de imagen, y los metodos estan especializados para dibujar un solo pixel, para esto necesitaras crear tu rutina que te dibuje un caracter, esto lo pudieses hacer con un arreglo bidimiencional booleano para indicar cuando pintar y cuadno no. Hay una forma mas facil, el metodo se llama drawString() y es de la clase java.awt.Graphics, la cual te permite pintar una cadena de String en una posicion x, y

seria algo como:

public void paint(Graphics g){

    g.drawString("Hola mundo", 50, 100); //para x = 50, y = 100;

}

Si hablamos de un componente swing, este metodo esta en todos los objetos Component, es decir, un JPanel, JFrame, etc, asi que la invocacion hacia este metodo paint() se realiza dentro del ciclo de vida del componente swing.

Espero te ayude.

2008/9/23 luis angel arias machado <lang...@hotmail.com>
Hola amigo al parecer me llego este correo por ekivocacion porke yo no pregunte eso,
mi pregunta era ¿como graficar un caracter en JAVA pixel por pixel usando el metodo SetPixel?
si me puedes ayudar te lo agradeceria...


Date: Tue, 23 Sep 2008 08:51:35 -0500

Fredy Tuco Calizaya

unread,
Sep 23, 2008, 4:25:58 PM9/23/08
to javam...@googlegroups.com
Hola NiCkEl bueno estuve viendo algo de ella, aqui te muestro el codigo que permite codificar un texto en java... espero que te sirva.

import java.security.*;
import javax.crypto.Cipher;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import java.security.spec.KeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Crypto {
   
    KeySpec keySpec;
   
    public SecretKey getKeyString() {
        String keyString="ACED00057372001E636F6D2E73756E2E63727970746F2E70726F76696465722E4445534B65796B349C35DA1568980200015B00036B65797400025B427870757200025B42ACF317F8060854E00200007870000000086438D0196107EFF1"; 
        try{
            byte[] keyBytes = keyString.getBytes("UTF8");
            keySpec = new DESedeKeySpec( keyBytes );
            SecretKeyFactory keyFactory;
            keyFactory = SecretKeyFactory.getInstance( "DESede" );
            SecretKey key = keyFactory.generateSecret( keySpec );
            return key;
        }catch (Exception e) {
            System.out.println("could not read private key: "+e);
            return null;
        }
    }
   
    private static String bytesToString( byte[] bytes )    {
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < bytes.length; i++)
        {
            stringBuffer.append( (char) bytes[i] );
        }
        return stringBuffer.toString();
    }
   
    public String encrypt(String texto) throws Exception{
        try{
            Security.addProvider( new com.sun.crypto.provider.SunJCE() );
            Key key = getKeyString();
            Cipher cipher = Cipher.getInstance("DESede");
            cipher.init(Cipher.ENCRYPT_MODE, key);
   
            BASE64Encoder encoder = new BASE64Encoder();
            byte[] cleartext = texto.getBytes("UTF8");
            byte[] ciphertext = cipher.doFinal(cleartext);
   
            return encoder.encode(ciphertext).toString();
        }catch (Exception e) {
            throw new Exception( e.getMessage() );
        }
    }

    public String decrypt(String texto) throws Exception{
        try{
            Security.addProvider( new com.sun.crypto.provider.SunJCE() );
            Key key = getKeyString();
            Cipher cipher = Cipher.getInstance("DESede");
            cipher.init(Cipher.DECRYPT_MODE, key);
           
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] cleartext = decoder.decodeBuffer(texto);
            byte[] ciphertext = cipher.doFinal(cleartext);
           
            return bytesToString(ciphertext);
        }catch (Exception e) {
            throw new Exception( e.getMessage() );
        }
    }

    public static void main(String[] args) {

        System.out.println("******* Sull crypto *******");
        Crypto c=new Crypto ();
        try{
           
            System.out.println("tu texto : "+c.encrypt("tutextoacodificar"));
           
        }catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
_______________________________________________________________________________________
--
Fredy
Reply all
Reply to author
Forward
0 new messages