Java - Como crear programa de encriptación sencillo?

 
Vista:
sin imagen de perfil

Como crear programa de encriptación sencillo?

Publicado por Albert (13 intervenciones) el 15/10/2016 11:32:20
Hola buenos días, he estado buscando la solución de muchas formas pero no la he encontrado ni se como hacerlo de ninguna manera. Necesito un programa de encriptación sencillo por el cual transforme un carácter por otro, por su complementario. Por ejemplo, si tenemos el alfabeto <abcdef> si pongo la "a" se debería transformar en "f" y inversamente lo mismo, tal como b=e, etc. Alguien sabe si podría ser posible hacerlo sin usar instrucciones condicionales?
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

Como crear programa de encriptación sencillo?

Publicado por Tom (1831 intervenciones) el 15/10/2016 12:49:02
Pues realmente hay bastantes formas, solo tienes que pararte a pensar un poco (y aprender java, por supuesto).

Java usa la codificación UTF8 para los caracteres. Y UTF8 incluye los códigos ASCII (los de 1 byte, "de toda la vida") sin modificar.

Así que siempre podrás encontrar la forma de transformar tu entrada a ascii, y luego tratar cada carácter de entrada como un byte, cuyo valor máximo será 127 (0x7F, que alguien me corrija si me equivoco). Y de esta manera, una recodificación como la que propones podría ser tan simple como:

byte entrada[];
byte salida[];
...
salida[posicion] = (byte)128 - entrada[posicion];
...

Ah! por si acaso ... echa un ojo a la doc. de la clase String:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
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
sin imagen de perfil

Como crear programa de encriptación sencillo?

Publicado por Albert Capilla Vila (13 intervenciones) el 15/10/2016 16:01:21
Hola buenas tardes, he probado lo que me ha dicho pero con argumentos para que no sea tan estático pero me salta error que al convertir int a byte se perderán posiblemente datos, aunque en ningún momento he establecido una variable int, hace poco que he empezado a estudiar programación java, por el cual un ejercicio como este me resulta bastante complicado la verdad, por el caso muestro el código que llevo de momento:

1
2
3
4
5
6
7
8
9
10
public class ejercicio8{
 
	public static void main (String [] args){
 
		byte entrada = Byte.parseByte(args[0]);
		byte salida = ((byte)128-entrada);
 
		System.out.println(salida);
	}
}
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
sin imagen de perfil
Val: 144
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como crear programa de encriptación sencillo?

Publicado por Thanatos (97 intervenciones) el 16/10/2016 03:17:19
Para el alfabeto: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z.

1
2
3
4
5
6
7
8
9
10
11
12
class Ejercicio8 {
 
    public static void main (String[] palabras) {
        for (String palabra : palabras) {
            for (int i = 0; i < palabra.length(); ++i) {
                System.out.printf("%c", 219 - palabra.charAt(i));
            }
            System.out.print(" ");
        }
    }
 
}
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

Como crear programa de encriptación sencillo?

Publicado por Tom (1831 intervenciones) el 16/10/2016 10:01:10
Por curiosidad (no suelo usar el tipo char) ... ¿ por qué 219 ?
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
sin imagen de perfil

Como crear programa de encriptación sencillo?

Publicado por Albert Capilla Vila (13 intervenciones) el 16/10/2016 16:43:55
Hola buenas, finalmente he usado un código diferente ya que tiene que ser bastante simple para que en clase se pueda entender y no vamos tan avanzados para usar ese tipo de comandos, por el cual el profesor no nos lo aceptaría como bueno, o sino como copiado, lo expongo a continuación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Scanner;
 
public class ejercicio8{
 
	public static void main (String []args){
		Scanner sc = new Scanner(System.in);
		int primer = 'a';
		int ultimo = 'l';
 
		System.out.print("Introduce el caracter: ");
		char letra = sc.next().charAt(0);
		System.out.print("El caracter complementario es: ");
		int resultado = ultimo-letra;
		System.out.println((char)(primer+resultado));
	}
}

Igualmente muchas gracias a todos, he podido ver diferentes formas de poder hacerlo que me irán estupendamente para más adelante en el curso o en la proximidad, me han gustado mucho todas las respuestas!
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
sin imagen de perfil
Val: 144
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como crear programa de encriptación sencillo?

Publicado por Thanatos (97 intervenciones) el 16/10/2016 16:49:35
Los códigos ASCII de los caracteres de la a a la z, están comprendidos dentro del rango del 97 al 122. Conociendo el rango, se puede emplear la solución de Gauss para la suma de los números del 1 al 100:

imagen


El resultado de todas las sumas es 219. Al restar de 219 el código ASCII de la letra actual, se obtiene el código ASCII de la letra que le corresponde en la mitad opuesta del alfabeto. La conversión implícita de char a int, permite realizar la operación sin hacer un casting a los caracteres de las cadenas.
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
sin imagen de perfil

Como crear programa de encriptación sencillo?

Publicado por Albert Capilla Vila (13 intervenciones) el 16/10/2016 16:58:29
Vale, eso no lo sabía, es muy interesante conocer esta forma de hacerlo también, aunque tengo aun la duda en las dos lineas que voy a mostrar, por que se hace un for de esa forma en la primera linea? Y la estructura lógica de la segunda tampoco la acabo de entender, disculpad las molestias y gracias.

for (String palabra : palabras) {
for (int i = 0; i < palabra.length(); ++i) {
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

Como crear programa de encriptación sencillo?

Publicado por Tom (1831 intervenciones) el 16/10/2016 18:11:11
Vale, no había caído en el detalle de usar solamente minúsculas ... al contar dígitos numéricos y mayúsculas no me salían las cuentas :D
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

Como crear programa de encriptación sencillo?

Publicado por Jose Andres Arizmendi Sanchez (1 intervención) el 17/10/2016 07:11:10
Saludos, he he estado trabajando en tiempos libres en un programa de encriptacion bastante sencillo, si te interese este es el proyecto, lo tengo en desarrollo y por cualquier sugerente te escucho.

https://github.com/Andres77872/JCRIP
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

Como crear programa de encriptación sencillo?

Publicado por YYanes (144 intervenciones) el 17/10/2016 19:36:09
Hola amigos:

tengan en cuenta que a la hora de hacer un encriptado de tipo "diccionario" (sustitución de los caracteres de un tipo por otro, por ejemplo: a=m, b=r, r=k) el encriptado final resulta muy fácil de desencriptar, incluso sin la ayuda de un ordenador, por ejemplo: en un párrafo contaríamos el caracter más repetido, y es muy posible que esa sea la letra "a" (la más usual en el idioma Español), luego iríamos a las letras dobles (que pueden ser muy pocas: cc ejemplo "contracción", rr ejemplo "carro", ll ejemplo "lluvia") y dichas letras quedarían muy fácilmente identificables; el siguiente paso sería despejar los monosílavos para deducir las vocales y algunas consonantes, y así sucesivamente, entre más grande el texto, más fácil será desencriptarlo.

Por otra parte, con la potencia de procesamiento de los ordenadores de hoy en día resulta fácil aplicar un "ataque de fuerza bruta" (sustituir los caracteres uno por uno por todos los caracteres posibles para la cadena) hasta dar con el texto claro. Lo ideal entonces sería poder diseñar algoritmos cullo tiempo necesario para romper con "fuerza bruta" sobrepase el tiempo de utilidad de la información protegida.

Aquí les muestro un mecanismo de encriptado de clave privada que tengo implementado, el cual les permitirá encriptar los textos sin importar su longitud, varía incluso la longitud del texto a encriptar, no presenta las debilidades de las letras dobles, y es incluso desencriptable si se conoce la clave:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class Encripter {
 
    private String patronBusqueda;
    private String patronEncripta;
 
    public Encripter() {
        patronBusqueda = "GlxnHMbcIfñK4LeUNFO1ms2PtDvSVkWXqirYTaghjZyo";
        patronEncripta = "eahdmifsWJBrWZD5CLpvMXQuVjkXqY6AoKyNzUgÑOPRt";
    }
 
    public String Encriptar(String cadena)
    {
       String resultado="";
        for(int pos = 0; pos< cadena.length(); pos++){
            if(pos==0){
            resultado= encriptarCaracter(cadena.substring(pos,pos+1),cadena.length(),pos);
            }
            else{
             resultado+= encriptarCaracter(cadena.substring(pos,pos+1),cadena.length(),pos);
            }
        }
    return resultado;
 
    }
    //----------------------
    public String encriptarCaracter(String caracter, int variable, int indice){
        int ind;
        if(patronBusqueda.indexOf(caracter)!=-1){
            ind = (patronBusqueda.indexOf(caracter) + variable + indice) % patronBusqueda.length();
        return patronEncripta.substring(ind, ind+1);
        }
    return caracter;
    }
    //----------------------
    public String desencriptaCadena(String cadena){
        String original="";
        for(int pos = 0; pos< cadena.length(); pos++){
            if(pos==0){
                original=desencriptaCaracter(cadena.substring(pos,pos+1),cadena.length(),pos);
            }
            else{
                original+=desencriptaCaracter(cadena.substring(pos,pos+1),cadena.length(),pos);
            }
        }
        return original;
    }
    //----------------------
    public String desencriptaCaracter(String caracter, int variable, int indice){
        int ind=0;
        if(patronEncripta.indexOf(caracter) != -1){
            if((patronEncripta.indexOf(caracter) - variable - indice) > 0){
            ind = (patronEncripta.indexOf(caracter) - variable - indice) % patronEncripta.length();
            }
            else{
            ind = (patronBusqueda.length()) + ((patronEncripta.indexOf(caracter)- variable - indice) % patronEncripta.length());
            }
            ind = ind % patronEncripta.length();
        return patronBusqueda.substring(ind, ind + 1);
        }
        else
        {
        return caracter;
        }
    }
    //----------------------
}
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

Como crear programa de encriptación sencillo?

Publicado por Tom (1831 intervenciones) el 28/10/2016 14:19:04
Has implementado un cifrado polialfábetico clásico muy similar (o igual) al "cifrado Vigenere".
Las ventajas de ese algoritmo son sólo aparentes.

http://mikelgarcialarragan.blogspot.com.es/2015/11/criptografia-xix-cifrado-vigenere-y.html

El paquete java.security del JRE proporciona métodos mucho más seguros y relativamente simples de usar.

http://chuwiki.chuidiang.org/index.php?title=Encriptacion_con_Java
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
sin imagen de perfil
Val: 111
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como crear programa de encriptación sencillo?

Publicado por Gonzalo (112 intervenciones) el 19/10/2016 00:47:56
(lo prometido es deuda, favor de leer este post con musica de richad clayderman)

has pensado en usar bits? tal vez sea mas sencillo.

salu2
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