mariocl99 | |
| 2007-10-10 15:41 - Respuestas: 1 - Tema nº: 2475112
Características: Windows XP Profesional, P4 2.4 y 256 MB Ram.
Hola!!!
Mi problema es el siguiente necesito un método de encriptación de clave que me sirva tanto para una aplicación en Java y una en Visual Basic, hasta ahora estaba utilizando el método de encriptación DES en Java pero al tratar de reproducirlo en VB no he podido llegar al mismo resultado.
Gracias
Saludos.
Adjunto ejemplo en Java:
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.*;
import java.security.spec.*;
import sun.misc.*;
import java.io.*;
class DESEncryption {
/**
* Encripta un String utilizando el algoritmo DES
*
* @param clearText Texto en ckaro a encriptar
* @return texto encriptado en base 64
*/
public String encrypt (String clearText, Key key) {
String cipherTextB64 = "";
try {
// Necesitamos un cifrador
Cipher cipher = Cipher.getInstance("DES");
// Ciframos el texto en claro
cipher.init(Cipher.ENCRYPT_MODE, key);
byte cipherText[] = cipher.doFinal(clearText.getBytes());
// Codificamos el texto cifrado en base 64
BASE64Encoder base64encoder = new BASE64Encoder();
cipherTextB64 = base64encoder.encode(cipherText);
}
catch(NoSuchAlgorithmException nsae) {nsae.printStackTrace(); }
catch(InvalidKeyException ike) {ike.printStackTrace(); }
catch(NoSuchPaddingException nspe) {nspe.printStackTrace(); }
catch(IllegalBlockSizeException ibse) {ibse.printStackTrace(); }
catch(BadPaddingException bpe) {bpe.printStackTrace(); }
// Retornamos el texto cifrado en BASE64
return cipherTextB64;
}
/**
* Desencripta un testo cifrado en DES i codificado en base 64
*
* @param String cipherTextB64 Testo cifrado en DES y codificado en B64
* @return String Texto en claro
*/
public String decrypt (String cipherTextB64, Key key) {
String clearText = "";
try {
// Necesitamos un cifrador
Cipher cipher = Cipher.getInstance("DES");
// La clave está codificada en base 64
BASE64Decoder base64decoder = new BASE64Decoder();
byte cipherText[] = base64decoder.decodeBuffer(cipherTextB64);
// Ciframos el texto en claro
cipher.init(Cipher.DECRYPT_MODE, key);
byte bclearText[] = cipher.doFinal(cipherText);
clearText = new String(bclearText);
}
catch(NoSuchAlgorithmException nsae) {nsae.printStackTrace(); }
catch(NoSuchPaddingException nspe) {nspe.printStackTrace(); }
catch(InvalidKeyException ike) {ike.printStackTrace(); }
catch(IllegalBlockSizeException ibse) {ibse.printStackTrace(); }
catch(BadPaddingException bpe) {bpe.printStackTrace(); }
catch(IOException ioe) {ioe.printStackTrace(); }
return clearText;
}
/**
* Test de la clase
*/
public static void main (String args[]) {
// Clave de 64 bits, dado que DES utiliza 56 bits
byte[] secret = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
Key key = null;
try {
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
key = skf.generateSecret(new DESKeySpec(secret));
}
catch(NoSuchAlgorithmException nsae) {nsae.printStackTrace(); }
catch(InvalidKeyException ike) {ike.printStackTrace(); }
catch(InvalidKeySpecException ikse) {ikse.printStackTrace(); }
DESEncryption desencryption = new DESEncryption();
String cipherText = desencryption.encrypt("Texto en claro", key);
System.out.println("Texto cifrado: " + cipherText);
String clearText = desencryption.decrypt(cipherText, key);
System.out.println("Texto en claro: " + clearText);
}
}
| |
|