Programa de Correo con AES y RSA, problema acentos.

korchoi
19 de Julio del 2009
Hola. Estoy programando un programa de correo electrónico con RSA y AES, que os podeis bajar en:

http://www.aderiva.net/tiki-index.php?page=Programas&bl

(Se llama Correo). El problema es que al usar la clase RSACoder me salen signos "raros" en los acentos y no se como solucionarlo. Si hay algún experto en java le agradecería la ayuda. Aquí está el código:

import java.math.BigInteger;
import java.util.*;
import java.io.*;

public class RSACoder{

int tamPrimo;
BigInteger n, e, d;

RSACoder(String cn, String ce, String cd){
n=new BigInteger(cn,16);
e=new BigInteger(ce,16);
d=new BigInteger(cd,16);
}

public BigInteger[] encripta(String mensaje){
int i;
byte[] temp = new byte[1];
byte[] digitos;
try{
//mensaje=new String(mensaje.getBytes(),"ISO-8859-1");
digitos = mensaje.getBytes("ISO-8859-1");
}catch(UnsupportedEncodingException uee){
digitos = mensaje.getBytes();
}
BigInteger[] bigdigitos = new BigInteger[digitos.length];

for(i=0; i<bigdigitos.length;i++){
temp[0] = digitos[i];
bigdigitos[i] = new BigInteger(temp);
}

BigInteger[] encriptado = new BigInteger[bigdigitos.length];

for(i=0; i<bigdigitos.length; i++)
encriptado[i] = bigdigitos[i].modPow(e,n);

return(encriptado);
}

/**
* Desencripta el texto cifrado usando la clave privada
*
* @param encriptado Array de objetos BigInteger que contiene el texto cifrado
* que será desencriptado
* @return The decrypted plaintext
*/
public String desencripta(BigInteger[] encriptado) {
BigInteger[] desencriptado = new BigInteger[encriptado.length];

for(int i=0; i<desencriptado.length; i++)
desencriptado[i] = encriptado[i].modPow(d,n);
char[] charArray = new char[desencriptado.length];
for(int i=0; i<charArray.length; i++)
charArray[i] = (char) (desencriptado[i].intValue());
String s=new String(charArray);
try{
s=new String(s.getBytes("ISO-8859-1"),"UTF-8");
}catch(UnsupportedEncodingException uee){return "Erro. Codificación non soportada.";}
return s;
}

/*public String desencripta(BigInteger[] encriptado) {
BigInteger[] desencriptado = new BigInteger[encriptado.length];

for(int i=0; i<desencriptado.length; i++)
desencriptado[i] = encriptado[i].modPow(d,n);
byte[] byteArray = new byte[desencriptado.length];
for(int i=0; i<byteArray.length; i++)
byteArray[i] = (byte) (desencriptado[i].intValue());
//try{return(new String(byteArray, "ISO-8859-1"));}
try{return(new String(byteArray, "ASCII"));}
catch(UnsupportedEncodingException uee){return "Erro. Codificación non soportada.";}
}*/

public String cifra(String mensaxe){
String s=new String("");
BigInteger[] cifrado=encripta(mensaxe);
for(int i=0;i<cifrado.length;i++){
s+=cifrado[i].toString(16)+".";
} // for.
return s;
}

public String descifra(String cifrado){
int numeros=0;
for(int i=0;i<cifrado.length();i++){
if(cifrado.charAt(i)==\'.\')numeros++;
} //for.
BigInteger[] codificado=new BigInteger[numeros];
String s=new String("");
int numero=0;
for(int i=0;i<cifrado.length();i++){
if(cifrado.charAt(i)==\'.\'){codificado[numero]=new BigInteger(s,16);numero++;s="";}
else s+=cifrado.charAt(i);
} //for.
return desencripta(codificado);
}

}