Java - implementar AEs en java

   
Vista:

implementar AEs en java

Publicado por juan (4 intervenciones) el 24/03/2008 20:17:54
Hola, saben quiero implementar el algoritmo de AES en java pero no tengo la minima idea, alguna conoce como funciona este algoritmo ??? o mejor aun alguien tiene el codigo fuente ??? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:implementar AEs en java

Publicado por tony-kun (42 intervenciones) el 24/03/2008 21:59:17
aqui hay algo.

al arreglo byte[] iv puedes ponerle cualquier cosa, pero de 16 caracteres y debe ser el mismo en encriptacion y desencriptacion.

La idea de la funcion getClave16, es obtener una clave de 16 bytes a partir de una cualquiera porque asi se usa en la encriptacion. Tiene código que no es indispensable y está medio rarita pero eso velo tú, si quieres usas la misma tal cual u otra cosa.

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;
import java.util.*;

public class AES
{

public static void encriptar (char[] pass, File desde, File hacia) throws Exception
{
byte[] pass16 = getClave16 (pass);
Arrays.fill (pass, (char)0);

byte[] iv = "1234567890123456".getBytes("UTF-8");
IvParameterSpec extra = new IvParameterSpec(iv);

Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec key = new SecretKeySpec (pass16, "AES");
Arrays.fill (pass16, (byte)0);
c.init (Cipher.ENCRYPT_MODE, key, extra);

FileInputStream in = new FileInputStream(desde);
FileOutputStream out = new FileOutputStream(hacia);
out.write (iv);
byte[] buffer = new byte[4096];
int i;
while ((i = in.read(buffer)) != -1)
{ out.write(c.update(buffer, 0, i)); }
out.write (c.doFinal());
out.close();
in.close();
}

/** aki hay un ejemplo. el archivo a encriptar es ejemplo.zip. Se encripta y luego se desencripta y genera ejemplo_copia.zip, que supuestamente es igual al ejemplo.zip original. */
public static void main (String[] args)throws Exception
{
String s = "miclavesereta";
AES.encriptar (s.toCharArray(), new File("ejemplo.zip"), new File ("ejemplo_protegido.zip"));
AES.desencriptar (s.toCharArray(), new File("ejemplo_protegido.zip"), new File ("ejemplo_copia.zip"));
}

public static void desencriptar (char[] pass, File desde, File hacia)throws Exception
{
byte[] pass16 = getClave16 (pass);
Arrays.fill (pass, (char)0);
byte[] iv = "1234567890123456".getBytes("UTF-8");
IvParameterSpec extra = new IvParameterSpec(iv);

Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec key = new SecretKeySpec (pass16, "AES");
Arrays.fill (pass16, (byte)0);
c.init (Cipher.DECRYPT_MODE, key, extra);

FileInputStream in = new FileInputStream(desde);
int n;//*
int total = 0;
while (total < iv.length)
{
n = in.read (iv, total, iv.length - total);
if (n == -1)
{ throw new CException ("No se pudo desencriptar."); }
total += n;
}//*/

FileOutputStream out = new FileOutputStream(hacia);
byte[] buffer = new byte[4096];
while ((n = in.read(buffer)) != -1)
{
out.write(c.update(buffer, 0, n));
}
out.write(c.doFinal());
out.close();
in.close();
}

public static byte[] getClave16 (char[] clave)
{
MessageDigest md = null;
try
{ md = MessageDigest.getInstance ("SHA-1"); }
catch (Exception e) {}
byte[] msg = new byte[clave.length];
for (int i=0; i<clave.length; ++i)
{ msg[i] = (byte)clave[i]; }
md.update(msg);

byte[] msg2 = md.digest();
Arrays.fill (msg, (byte)0);
System.out.println (""+System.currentTimeMillis());
for (int i=0; i<70000; ++i)
{
msg = new byte[msg2.length+1];
System.arraycopy (msg2, 0, msg, 0, msg2.length);
msg[msg2.length] = (byte)(i%128);
md.update (msg);
Arrays.fill (msg2, (byte)0);
msg2 = md.digest();
Arrays.fill (msg, (byte)0);
}
byte[] clave16 = new byte[16];
for (int i=0; i<16; ++i)
{ clave16[i] = msg2[i]; }
Arrays.fill (msg2, (byte)0);

return clave16;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:implementar AEs en java

Publicado por juan (4 intervenciones) el 24/03/2008 22:33:28
gracias si es bueno, pero lo que realemnte necesito es implementar el algoritmo de AES y no él utilizarlo directamente de las librerias, si alguien sabe algo please mandenmelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar