Java - Define un método llamado encripta() y desEncripta()

 
Vista:

Define un método llamado encripta() y desEncripta()

Publicado por ramon (15 intervenciones) el 15/03/2019 12:11:58
Estos dos ejercciios no se hacerlos si alguien me puede ayudar



En una clase Utilidades:

Define un método llamado encripta() que reciba un texto como argumento y lo encripte utilizando el algoritmo de Cesar y lo devuelva transformado.
Deben seguirse los principios y estilo del código limpio.






En una clase Utilidades:

Define un método llamado desEncripta() que reciba un texto encriptado como argumento y utilizando el algoritmo de Cesar inverso y lo devuelva transformado como texto en claro.
Deben seguirse los principios y estilo del código limpio.
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Define un método llamado encripta() y desEncripta()

Publicado por Kabuto (1381 intervenciones) el 18/03/2019 01:26:49
El Cifrado Cesar es cambiar las letras de un texto "desplazándolas" todas el mismo número de veces.

Por ejemplo, si tenemos el texto: ABC
Y hacemos un desplazamiento de 2, pues quedará cifrado así CDE
O si fuera desplazamiento 3, quedaría: DEF

Una forma de hacer esto en Java, es valernos del codigo ASCII que tiene cada caracter.

Por ejemplo, para hacer "desplazamiento 2" a la letra A y convertirla en C.
Su codigo ASCII es 65.
Si le sumamos el desplazamiento: 65 + 2 = 67
67 es el codigo ASCII de C, así que ya la tenemos convertida.

Vale, ¿cómo hacemos esto en Java?

Supongamos que tenemos esta cadena:
1
String cadena = "hola";

En Java no podemos modificar un String, así que para cifrar esta cadena en realidad tendremos que construir una nueva.
Esta nueva cadena empezará vacía y lo que iremos haciendo será concatenar las letras ya cifradas (desplazadas) una a una.
1
String cifrada = "";

Vale, ahora tenemos que ir letra a letra, obtener su codigo ASCII, sumarle el desplazamiento, y volver a convertir ese codigo ASCII desplazado en una letra.
- Para recorrer las letras de la cadena, usamos un bucle.
- Para obtener el codigo ASCII, contamos con un método que nos da la clase String: codePointAt();
- Una vez tenemos el codigo ASCII, le sumamos el desplazamiento y lo convertimos en un char.
- Concatenamos ese char a la cadena que estamos construyendo con las letras ya cifradas.

Algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Cesar {
 
	public static void main(String[] args) {
		String cadena = "hola";
		String cifrada = "";
		int desplazar = 2;
 
		for (int i = 0; i < cadena.length(); i++) {
 
			//Obtenemos codigo ASCII de las letras de la cadena
			int codigoLetra = cadena.codePointAt(i);
			//Sumamos el desplazamiento al codigo y convertimos en char el resultado
			char letraDesplazada = (char)(codigoLetra + desplazar);
			//Concatenamos la letra obtenida a la cadena donde vamos cifrando
			cifrada = cifrada + letraDesplazada;
		}
 
		//Mostramos resultados
		System.out.println("Cadena original: " + cadena);
		System.out.println("Cadena cifrada: " + cifrada);
 
	}
 
}

Una vez hayas entendido esto, no creo que tengas problemas en hacer los métodos que te están pidiendo.
Desencriptar es hacer lo mismo, pero restando el desplazamiento en lugar de sumarlo.

Por cierto, esto que he escrito es una versión muy simplificada y en realidad no es del todo perfecta.
Por ejemplo, si el texto contiene la letra 'z' y hacemos un desplazamiento de 2, debería convertirse en una 'b' porque ha de volver al principio del alfabeto.
Pero esto no está contemplado en este código y en realidad la 'z' (codigo ASCII: 122) acabará convertida en el símbolo pipe '|' (codigo ASCII: 124)

En el caso de la letra 'ñ', caracter ajeno al alfabeto inglés, tampoco recibirá un desplazamiento correcto.

Corregir esto para que funcione como ha de ser, es un poco engorroso y de hecho la solución más óptima probablemente sea prescindir de la tabla ASCII y contruir nuestra propia tabla con un array de chars.

Así que de momento, ignora estos defectillos y realiza el ejercicio sin tenerlos en cuenta.
Luego, cuando tengas el ejercicio completado y lo hayas entendido bien, puedes plantearte mejorarlo corrigiendo lo que acabamos de comentar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar