Oct 01
A continuacion una implementacion de algoritmo de cifrado de datos Blowfish.
import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; import java.io.*; public class BlowFish { public static String encriptar(String cleartext, String key) throws Exception{ try { return crypt(cleartext, key, Cipher.ENCRYPT_MODE); } catch (Exception ex) { throw new Exception("Imposible encriptar los datos."); } } public static String desEncriptar(String ciphertext, String key) throws Exception { try { return crypt(ciphertext, key, Cipher.DECRYPT_MODE); } catch (Exception ex) { throw new Exception("Imposible desencriptar los datos."); } } private static String crypt(String input, String key, int mode) throws Exception { // Install SunJCE provider Provider sunJce = new com.sun.crypto.provider.SunJCE(); Security.addProvider(sunJce); KeyGenerator kgen = KeyGenerator.getInstance("Blowfish"); kgen.init(448); SecretKey skey = kgen.generateKey(); byte[] raw = key.getBytes(); SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); cipher.init(mode, skeySpec); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayInputStream bis = new ByteArrayInputStream(input.getBytes()); CipherOutputStream cos = new CipherOutputStream(bos, cipher); int length = 0; byte[] buffer = new byte[8192]; while ((length = bis.read(buffer)) != -1) { cos.write(buffer, 0, length); } bis.close(); cos.close(); return bos.toString(); } }
Modo de Uso:
//Encriptado String datos="Informacion a encriptar"; datos=BlowFish.encriptar(datos, "ClavePrivada"); //Desencriptado datos=BlowFish.desEncriptar(datos, "ClavePrivada");
20/1/09 a las 12:52 am
oie muchas gracias por tu aporte se agradece me sirvio para darme una idea del funcionamiento del algoritmo nadamas una cosita si tienes algun documento o algo asi para investigar acerca del algoritmo
3/2/09 a las 1:50 pm
Tio esto no funciona ni a la de 3
20/2/09 a las 10:08 am
Primero que nada, esta COPIADO de otra pagina…solo has cambiado algunas palabras al español.
Segundo, NO FUNCIONA
lamentable post…
21/2/09 a las 1:53 am
Obviamente no reinvente la rueda.
Bravo! Supiste leer que dice…
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;
Si dijeras porque no te funciona te podriamos ayudar, pero con esa actitud no vas a lograr mucho.
Saludos!
3/3/09 a las 2:28 pm
Estoy implementando esta clase pero tengo algunos problemas… radica en que encripto y cuando desencripto no “es lo mismo”…. Espero me peudan colaborar a solucionar esta incidencia
21/7/09 a las 7:37 pm
Hola a todos, yo tenia el mismo problema al utilizar esa implementacion, lo resolvi de la siguiente forma, este es el metodo principal dentro mi clase Blowfish:
public static String crypt(String inputText, String key, int mode)throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), “Blowfish”);
Cipher cipher = Cipher.getInstance(”Blowfish/ECB/PKCS5Padding”);
cipher.init(mode, skeySpec);
String generated = “”;
if (mode == Cipher.ENCRYPT_MODE) {
byte[] encrypted = cipher.doFinal(inputText.getBytes());
generated = new sun.misc.BASE64Encoder().encode(encrypted);
} else if (mode == Cipher.DECRYPT_MODE) {
byte[] decrypted = cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer((inputText)));
generated = new String(decrypted);
}
return generated;
}
}
el llamado seria
Blowfish.cryp(”originalText”, “key”,Cipher.ENCRYPT_MODE);
Blowfish.crypt(”cipherText”, key, Cipher.DECRYPT_MODE);
Me di cuenta que en algunas ocaciones al querer desencriptar el texto encriptado y convertido a String me sustituia un valor de un byte, siempre que quieras cambiar bytes a String debes de hacerlo pero con Base64.
Espero les sirva a mi me funciono.
22/7/09 a las 5:29 am
Gracias Ady… me paso lo mismo que a vos pero con otros algoritmos de cifrado, como DSA, y la verdad que es muy buena practica codificar en BASE64 antes de mandarle realmente la codificacion.
Saludos!
8/7/10 a las 3:21 am
Houses are expensive and not everybody can buy it. However, loan are invented to aid people in such situations.