Cifrado en JAVA

  • 7 Respuestas
  • 5357 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DeBobiPro

  • *
  • Ex-Staff
  • *****
  • Mensajes: 328
  • Actividad:
    3.33%
  • Reputación 6
  • Como no sabía que era imposible, lo hice.
    • Ver Perfil

Cifrado en JAVA

  • en: Junio 11, 2015, 10:27:12 pm
Les comparto un código que realicé en JAVA que cifra palabras o frases según una llave numérica que nosotro definamos


¿Cómo funciona?
Definimos una clave privada la cual usaremos para cifrar y desifrar el código ( esta clave tiene que ser numérica de largo variable)

Lo que hace es lo siguiente:

Si utilizamos la clave 9876 y la palabra "cifrado ejemplo" se ordenará de la siguiente manera

C  I  F R A D O     E  J   E  M P L O
9 8  7 6 9 8 7       6 9  8   7 6  9 8

finalmente hará un cifrado Cesar de X cantidad de saltos según el número asociado en el siguiente 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 _ . , ; :

Si llega al final del alfabeto seguirá con el inicio.

Espero les sirva , acá el Code
Código: Java
  1. package cifradoJava;
  2.  
  3. public class CifradoJAVA {
  4.         static char ALFA[] = {'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', '_', '.', ',', ';', ':'};
  5.         static int count = 0, pos;
  6.         static You are not allowed to view links. Register or Login aux,encrypt;
  7.        
  8.     static You are not allowed to view links. Register or Login Cifrar(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase) {
  9.         count = 0;
  10.         aux = "";
  11.         encrypt = "";
  12.         for (int i = 0; i < phrase.length(); i++) {
  13.  
  14.             if (!" ".equals(phrase.substring(i, i + 1))) {
  15.                 aux = aux + key.substring(count, count + 1);
  16.                 count++;
  17.             } else {
  18.                 aux = aux + " ";
  19.             }
  20.  
  21.             if (count > key.length() - 1) {
  22.                 count = 0;
  23.             }
  24.         }
  25.  
  26.         for (int i = 0; i < phrase.length(); i++) {
  27.  
  28.             for (int j = 0; j < ALFA.length; j++) {
  29.                 if (You are not allowed to view links. Register or Login.valueOf(ALFA[j]).equalsIgnoreCase(phrase.substring(i, i + 1))) {
  30.                     pos = j + You are not allowed to view links. Register or Login.parseInt(aux.substring(i, i + 1));
  31.  
  32.                     if (pos >= ALFA.length) {
  33.                         pos = pos - ALFA.length;
  34.                     }
  35.                     encrypt = encrypt + ALFA[pos];
  36.                 }
  37.                 if (phrase.substring(i, i + 1).equalsIgnoreCase(" ")) {
  38.                     encrypt = encrypt + " ";
  39.                     j = ALFA.length;
  40.                 }
  41.             }
  42.  
  43.         }
  44.  
  45.         //System.out.println(phrase);
  46.         //System.out.println(aux);
  47.         //System.out.println(encrypt);
  48.         return encrypt;
  49.     }
  50.  
  51.     static You are not allowed to view links. Register or Login Decifrar(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase) {
  52.         count = 0;
  53.         aux = "";
  54.         encrypt = "";
  55.         for (int i = 0; i < phrase.length(); i++) {
  56.  
  57.             if (!" ".equals(phrase.substring(i, i + 1))) {
  58.                 aux = aux + key.substring(count, count + 1);
  59.                 count++;
  60.             } else {
  61.                 aux = aux + " ";
  62.             }
  63.  
  64.             if (count > key.length() - 1) {
  65.                 count = 0;
  66.             }
  67.         }
  68.  
  69.         for (int i = 0; i < phrase.length(); i++) {
  70.  
  71.             for (int j = 0; j < ALFA.length; j++) {
  72.                 if (You are not allowed to view links. Register or Login.valueOf(ALFA[j]).equalsIgnoreCase(phrase.substring(i, i + 1))) {
  73.                     pos = j - You are not allowed to view links. Register or Login.parseInt(aux.substring(i, i + 1));
  74.  
  75.                     if (pos < 0) {
  76.                         pos = (ALFA.length) - pos;
  77.                     }
  78.                     //System.out.println("pos: "+pos);
  79.                     encrypt = encrypt + ALFA[pos];
  80.                 }
  81.                 if (phrase.substring(i, i + 1).equalsIgnoreCase(" ")) {
  82.                     encrypt = encrypt + " ";
  83.                     j = ALFA.length;
  84.                 }
  85.             }
  86.  
  87.         }
  88.         return encrypt;
  89.     }
  90.  
  91.     public static void main(You are not allowed to view links. Register or Login[] args) {
  92.  
  93.         You are not allowed to view links. Register or Login phrase = "debobipro";
  94.         You are not allowed to view links. Register or Login key = "9876"; //Cualquier número
  95.  
  96.         You are not allowed to view links. Register or Login.out.println(Cifrar(key, phrase));
  97.         You are not allowed to view links. Register or Login.out.println(Decifrar(key, Cifrar(key, phrase)));
  98.  
  99.     }
  100.  
  101. }

Que lo aprovechen :)!
« Última modificación: Junio 12, 2015, 10:25:37 am por DeBobiPro »
Nivel 77 You are not allowed to view links. Register or Login

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
  • Skype: gus.garsaky
    • Ver Perfil

Re:Cifrado en JAVA

  • en: Junio 12, 2015, 10:13:07 am
Gracias por el source, DeBobi. Como pequeña recomendación, trata de documentar los métodos para que sea mas easy to read.


Salu2.

Desconectado DeBobiPro

  • *
  • Ex-Staff
  • *****
  • Mensajes: 328
  • Actividad:
    3.33%
  • Reputación 6
  • Como no sabía que era imposible, lo hice.
    • Ver Perfil

Re:Cifrado en JAVA

  • en: Junio 12, 2015, 10:14:39 am
si si, ayer estaba medio pillado, lo tengo casi documentado ya :3

Gracias por la recomendación
Nivel 77 You are not allowed to view links. Register or Login

Desconectado Snifer

  • *
  • Ex-Staff
  • *****
  • Mensajes: 1439
  • Actividad:
    0%
  • Reputación 1
  • [email protected]'s
  • Twitter: sniferl4bs
    • Ver Perfil
    • Snifer@L4bs

Re:Cifrado en JAVA

  • en: Junio 12, 2015, 01:20:55 pm
Cuenta considerar caracteres especiales como ser @ ;).

Regards,
Snifer
You are not allowed to view links. Register or Login


Llaman traidor a la persona que evito que caiga el foro, gente bruta!



Desconectado Adalher

  • *
  • Underc0der
  • Mensajes: 111
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Cifrado en JAVA

  • en: Mayo 29, 2019, 05:43:04 pm
Hola DeBobiPro,

1) Solo puedo ponerte en el corazón: ocúpate más intensamente con fundamentos y especialmente con convenciones de código.
2) Aquí no quiero ser vil pero: si está haciendo un pequeño ejercicio de programación en la escuela que utiliza el cifrado César como contenido, no significa eso que el código resultante sea de alguna utilidad para el público en general. Solo sirve para el propio entrenamiento personal de quien hace el ejercicio - nada más. Para TODO lo que se publica como resultado de un ejercicio habrá mejores soluciones. Estoy muy seguro de eso. Por ejemplo para el tema: cifrado.
Y, si uno piensa: “Eso no está pensado para algún uso productivo, sino como una ayuda para las personas que realizan este ejercicio o un ejercicio similar" entonces digo: No, ni siquiera eso. Primero, el resultado del trabajo de tales ejercicios suele ser tan deficiente en calidad que solo sirve como un ejemplo negativo, y en segundo lugar, deberían hacer otros, que hacen tal ejercicio, los ejercicios ellos mismos y no copiarlos. Pues el propósito de tales ejercicios no es el resultado/código final, sino la experiencia de llegar allí.

Saludos

Desconectado ravenheart

  • *
  • Underc0der
  • Mensajes: 6
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil

Re:Cifrado en JAVA

  • en: Mayo 30, 2019, 06:05:38 pm
A lo mejor el autor ya ha aprendido la lección en los últimos cuatro años ;)

Pero ya que abres el debate...

You are not allowed to view links. Register or Login
Primero, el resultado del trabajo de tales ejercicios suele ser tan deficiente en calidad que solo sirve como un ejemplo negativo
¿Y por qué es este un ejemplo negativo? ¿Qué harías de otra forma, y por qué?

Desconectado Adalher

  • *
  • Underc0der
  • Mensajes: 111
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Cifrado en JAVA

  • en: Junio 03, 2019, 10:29:35 am
Hola ravenheart,

un detalle: los nombres de los métodos en Java se escriben por convención en lowerCamelCase.
Generalmente, los métodos para cifrar y descifrar están demasiado sobrecargados y difíciles de entender porque DeBobiPro ha puesto todos los pasos del cifrado/descifrado en un método. Además, el cambia las variables de clase dentro de los métodos. Estas variables pueden ser variables locales dentro de los métodos porque DeBobiPro no desea transportar información a través de múltiples llamadas de métodos con esas variables. Entonces esto evita un posible Multithreading (llamada de sus métodos desde múltiples Threads hacia afuera).
Los pasos individuales, así como se ven en DeBobiPro, son:
1. Asignar la frase a una secuencia de valores clave/números clave (su primer bucle).
2. Encontrar el índice de un carácter en el alfabeto (el bucle interno dentro del segundo bucle).
3. “Offsettear” este índice con el valor clave/dígito clave calculado en el paso uno.
4. Componer el resultado (en la variable 'encrypt').
5. Además, atender siempre el espacio.
Yo separaría más estos aspectos individuales, de tal forma que este claro qué cosa sucede exactamente y donde.
Por diversión, se ha construido una realización funcional del cifrado (usen jOOL You are not allowed to view links. Register or Login - según algunas opiniones, esto debería ser parte del JRE, pero da igual…) y se ha dividido más los pasos.
Código: Java
  1. import static java.util.stream.IntStream.range;
  2. import static org.jooq.lambda.Seq.seq; // <- https://github.com/jOOQ/jOOL
  3. import java.util.ArrayList;
  4. import java.util.function.Supplier;
  5. import java.util.stream.Stream;
  6. public class VerschlüsselungJAVA2 {
  7.   private final static int ALFA[] = {
  8.     'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
  9.     'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', '.', ',', ';', ':'
  10.   };
  11.   private static Supplier<? extends IllegalArgumentException> characterNotInAlphabet(int cp) {
  12.     return () -> new You are not allowed to view links. Register or Login("Character not in alphabet: " + You are not allowed to view links. Register or Login.toString(cp));
  13.   }
  14.   private static int alphaAt(int index) {
  15.     return ALFA[index % ALFA.length];
  16.   }
  17.   public static You are not allowed to view links. Register or Login encrypt(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase) {
  18.     // zip the phrase characters with the exclusive prefix
  19.     // sum mapping the space to 0 and every other character to 1,
  20.     // lookup the alphabet character and offset by the key digit
  21.     // at the index provided by the prefix sum
  22.     return seq(phrase.chars())
  23.           .map(You are not allowed to view links. Register or Login::toUpperCase)
  24.           .zip(keyIndicesOf(phrase))
  25.           .map(t -> t.v1 == ' ' ? ' ' : alphaAt(offset(t.v1, key, t.v2)))
  26.           .map(You are not allowed to view links. Register or Login::toString)
  27.           .toString();
  28.   }
  29.   private static int findAlphabetIndexOf(int cp) {
  30.     // 'C' -> 2
  31.     return range(0, ALFA.length)
  32.           .filter(i -> ALFA[i] == cp)
  33.           .findFirst()
  34.           .orElseThrow(characterNotInAlphabet(cp));
  35.   }
  36.   private static int offset(int phraseChar, You are not allowed to view links. Register or Login key, int keyIndex) {
  37.     // Find the index of the phrase character and offset by the digit at the key index
  38.     return findAlphabetIndexOf(phraseChar)
  39.          + key.charAt(keyIndex % key.length()) - '0';
  40.   }
  41.   private static Stream<Integer> keyIndicesOf(You are not allowed to view links. Register or Login phrase) {
  42.     // Exclusive prefix sum of the stream producing
  43.     // 0 for spaces and 1 for every other character
  44.     // "abc de f" -> [0, 1, 2, 2, 3, 4, 4, 5]
  45.     return phrase.chars()
  46.           .map(c -> isIgnored(c) ? 0 : 1)
  47.           .collect(ArrayList<Integer>::new,
  48.                    (l, v) -> l.add(v + (l.isEmpty() ? 0 : l.get(l.size() - 1))),
  49.                    (l1, l2) -> {}).stream()
  50.           .map(i -> i - 1);
  51.   }
  52.   private static boolean isIgnored(int c) {
  53.     return c == ' ';
  54.   }
  55.   public static void main(You are not allowed to view links. Register or Login[] args) {
  56.     You are not allowed to view links. Register or Login phrase = "cifrado ejemplo";
  57.     You are not allowed to view links. Register or Login key = "9876"; // Cualquier número
  58.     You are not allowed to view links. Register or Login.out.println(encrypt(key, phrase));
  59.   }
  60. }
  61.  

Independientemente de la implementación real: el cifrado César NUNCA es razonable. Hay mejores métodos para cifrar.
Déjame intentar aclarar lo que realmente se quiere expresar con esto: El cifrado es relativamente complejo. Cuando se trata de cifrado, hay que tener en cuenta muchos aspectos. Ya el generador aleatorio de números aleatorios juega un papel importante. Los conceptos básicos ya son tan complejos que ellos obtienen su propia conferencia. Encriptaciones de César tan simples son una broma. Ellas pueden ser descifradas por ataques triviales. A esto entonces, de niño, ya basta con leer un libro correspondiente (Así que tenía un libro ? ? ? con acertijos en aquel entonces. Pues en un tiempo eso también era precisamente un tema…).
Y solo un ejemplo que muestra la complejidad:
Después de que se supo que alguien está trabajando para la NSA en un gran sistema operativo de código abierto y de que la confianza se había ido de repente, se necesitaron dos semanas (creo) solamente para ver si existía un debilitamiento del cifrado y cómo había llegado a existir este. Solo se tenía que comprobar los Commits de la persona.
U otro tema:
Imagínate que escribes un algoritmo que muestre de qué forma está ese algoritmo actualmente detrás del cifrado SSL. Uno podría pensar: Hurra, algoritmo logrado. Se ve bien. Pero no - incluso ahí hay muchos expertos que optimizan constantemente y descartan cosas antiguas! Por lo tanto, pertenece a la administración tanto en el cliente como en el lado del servidor, qué algoritmos se querrá permitir para el acceso SSL.
Por consiguiente, el cifrado no es tan trivial. Y si se desea tener un cifrado que conserve el formato, entonces también existen posibilidades correspondientes (You are not allowed to view links. Register or Login).
En general, se debe tener en cuenta que, con trabajos de desarrollo tan pequeños en la escuela y en el estudio, el aprendizaje está en primer plano. Allí se simplifica mucho. Entonces, de ahí se querrá escribir un árbol de búsqueda ordenado y equilibrado, pero eso no jugará ningún papel más más adelante porque se obtendrá soluciones mucho mejores (con mejor rendimiento), en donde además se utilizan hashcodes (Por lo tanto, el tipo de datos almacenado ya no necesita implementar un Comparable) y mucho más.
Si se quiere se puede hacer esto hasta tal punto que al final se tiene una base de datos In Memory o una base de datos en donde todo está almacenado con un Caching adecuado.
Así que, por favor, que no se tome esto personalmente, pero la evaluación del código para tareas estándar es correspondientemente así.

Saludos
« Última modificación: Junio 03, 2019, 10:31:18 am por Adalher »

Desconectado Adalher

  • *
  • Underc0der
  • Mensajes: 111
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Cifrado en JAVA

  • en: Octubre 25, 2019, 02:51:55 pm
Hola DeBobiPro,

revisando de nuevo tu código se me ocurren estas cosas:
Esto está un poco roto en MUCHOS casos. Todos se reducen a un solo problema. Cuando la frase contiene algún carácter, ese cambio de N veces es un valor demasiado grande y causa un IndexOutOfBounds (phrase = ".", key = "4").

Ahora, la calidad del código:
. Los nombres de las clases deben ser camelCased.
. ALFA tendría que ser final.
. Código repetitivo que se puede reducir.

Aquí hay una versión mejorada que hace lo que hace el tuyo, pero es más limpia y extensible:
Código: Java
  1. public class Cifrar {
  2.     private final You are not allowed to view links. Register or Login alfabeto;
  3.  
  4.     public Cifrar(You are not allowed to view links. Register or Login alfabeto) {
  5.         this.alfabeto = alfabeto;
  6.     }
  7.  
  8.     public You are not allowed to view links. Register or Login cifrar(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase) {
  9.         return rot(key, phrase, true);
  10.     }
  11.  
  12.     public You are not allowed to view links. Register or Login decifrar(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase) {
  13.         return rot(key, phrase, false);
  14.     }
  15.  
  16.     private You are not allowed to view links. Register or Login rot(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase, boolean avanzar) {
  17.         char[] fuera = new char[phrase.length()];
  18.         for(int i = 0; i < phrase.length(); i++) {
  19.             char c = phrase.charAt(i);
  20.             int indexAlfa = alfabeto.indexOf(c);
  21.             // Solo reemplaza caracteres en el alfabeto
  22.             if (indexAlfa >= 0) {
  23.                 // Determina la cantidad de cambios del i'th char en la frase
  24.                 int keyIndex = i % key.length();
  25.                 int llave = You are not allowed to view links. Register or Login.parseInt(key.substring(keyIndex, keyIndex + 1));
  26.                 if(!avanzar)
  27.                     llave = -llave;
  28.                 // Obtener el índice de reemplazo en el alfabeto
  29.                 int reemplazarIndex = (indexAlfa + llave) % alfabeto.length();
  30.                 if (reemplazarIndex < 0)
  31.                     reemplazarIndex = alfabeto.length() + reemplazarIndex;
  32.                 // Reemplazar
  33.                 c = alfabeto.charAt(reemplazarIndex);
  34.             }
  35.             fuera[i] = c;
  36.         }
  37.         return new You are not allowed to view links. Register or Login(fuera);
  38.     }
  39. }
  40.  

Y para usarlo:
Código: Java
  1. // Da caracteres soportados como cadena, pueden aparecer en cualquier orden.
  2. Cifrar c = new Cifrar(
  3.         "abcdefghijklmnopqrstuvwxyz" +
  4.         "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
  5.         "1234567890"
  6. );
  7. // key es una secuencia numérica
  8. You are not allowed to view links. Register or Login key = "123456789";
  9. // Frase y estados codificados/decodificados
  10. You are not allowed to view links. Register or Login phrase = "aaaaaaaaaa abc def ghi jkl mno pqr stu vwxyz 123 456 7890 -_=+*&^%$#@! () [] {}";
  11. You are not allowed to view links. Register or Login codificado = c.cifrar(key, phrase);
  12. You are not allowed to view links. Register or Login decodificado = c.decifrar(key, codificado);
  13. // Imprimir valores
  14. You are not allowed to view links. Register or Login.out.println(phrase);
  15. You are not allowed to view links. Register or Login.out.println(codificado);
  16. You are not allowed to view links. Register or Login.out.println(decodificado);
  17.  

Salida:
Código: You are not allowed to view links. Register or Login
aaaaaaaaaa abc def ghi jkl mno pqr stu vwxyz 123 456 7890 -_=+*&^%$#@! () [] {}
bcdefghijb dfh kmo ikm prt npr uwy Buw zBDFH 246 9ac f9ac -_=+*&^%$#@! () [] {}
aaaaaaaaaa abc def ghi jkl mno pqr stu vwxyz 123 456 7890 -_=+*&^%$#@! () [] {}

Cita de: DeBobiPro
ea

Cita de: Adalher
Retazo

Ten en cuenta que mi código es más limpio y cumple con los estándares POO.
DeBobiPro, escucha mis consejos para todo lo demás y deja de declarar matrices como si Java fuera C, por favor.
* 1 != 2: Esto es simplemente un meme. El paso 8 es donde las cosas van mal.

Lo mantuve conforme a la implementación de OP a este respecto intencionalmente.
Si bien la llave podría especificarse como int, eventualmente se convertiría en un string en este caso para obtener los dígitos. No es solo un gran número, sino una serie de números para cambiar. Probablemente sería mejor verificar las entradas en el constructor y lanzar una InvalidKeyException comprobada para casos ofensivos en lugar de tomar un int primitivo.
Código: Java
  1. public You are not allowed to view links. Register or Login cifrar(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase) throws You are not allowed to view links. Register or Login {
  2.     verificar(key);
  3.     return rot(key, phrase, true);
  4. }
  5.  
  6. public You are not allowed to view links. Register or Login decifrar(You are not allowed to view links. Register or Login key, You are not allowed to view links. Register or Login phrase) throws You are not allowed to view links. Register or Login {
  7.     verificar(key);
  8.     return rot(key, phrase, false);
  9. }
  10.  
  11. private void verificar(You are not allowed to view links. Register or Login key)throws You are not allowed to view links. Register or Login  {
  12.     if (!key.matches("\\d+"))
  13.         throw new You are not allowed to view links. Register or Login("La clave solo debe contener una secuencia de dígitos");
  14. }
  15.  

Alternativamente, puedes pasar una matriz int para omitir el análisis de dígitos.
Entonces incluso podrías usar llaves como: int[] key = { -241, 24, 48, -3, 0, 93, 5 };
Código: Java
  1. public You are not allowed to view links. Register or Login cifrar(int[] key, You are not allowed to view links. Register or Login phrase) {
  2.     return rot(key, phrase, true);
  3. }
  4.  
  5. public You are not allowed to view links. Register or Login decifrar(int[] key, You are not allowed to view links. Register or Login phrase) {
  6.     return rot(key, phrase, false);
  7. }
  8.  
  9. private You are not allowed to view links. Register or Login rot(int[] key, You are not allowed to view links. Register or Login phrase, boolean avanzar) {
  10.     char[] fuera = new char[phrase.length()];
  11.     for(int i = 0; i < phrase.length(); i++) {
  12.         char c = phrase.charAt(i);
  13.         int indexAlfa = alfabeto.indexOf(c);
  14.         // Solo reemplaza caracteres en el alfabeto
  15.         if (indexAlfa >= 0) {
  16.             // Determina la cantidad de cambios del i'th char en la frase
  17.             int keyIndex = i % key.length;
  18.             int llave = key[keyIndex];
  19.             if(!avanzar)
  20.                 llave = -llave;
  21.             // Obtener el índice de reemplazo en el alfabeto
  22.             int reemplazarIndex = (indexAlfa + llave) % alfabeto.length();
  23.             if (reemplazarIndex < 0)
  24.                 reemplazarIndex = alfabeto.length() + reemplazarIndex;
  25.             // Reemplazar
  26.             c = alfabeto.charAt(reemplazarIndex);
  27.         }
  28.         fuera[i] = c;
  29.     }
  30.     return new You are not allowed to view links. Register or Login(fuera);
  31. }
  32.  

Y sí, sea cual sea la salida que realmente se desee, mi código sería la opción óptima aquí, especialmente el fragmento final que ofrece más versatilidad y diversidad a pesar de que rompe por completo cualquier parecido con tu 'cifrado' (lo que de hecho es algo bueno en lo que respecta a esto porque el tuyo está roto y limitado a valores positivos de un solo dígito y falla en ciertos escenarios).
De todos modos, DeBobiPro, es una mejora con respecto a las publicaciones de BigBear al ver cómo esto al menos se compila. No es que debas tomar esto como un elogio. O tal vez deberías, ya no estoy seguro.


Saludos

 

[Video Curso] Iniciacion a Java por DesarrolloWeb y EscuelaIT Mayo 2014

Iniciado por graphixx

Respuestas: 3
Vistas: 3900
Último mensaje Febrero 23, 2015, 10:13:28 am
por Hu3c0
Java Extremo [Video Cursos Completos] [Español] [ISO] 2009

Iniciado por graphixx

Respuestas: 9
Vistas: 9799
Último mensaje Diciembre 04, 2017, 02:36:34 am
por graphixx
Como compilar programas Java en la consola de comandos de Windows

Iniciado por tar3kw0rm3d

Respuestas: 2
Vistas: 4234
Último mensaje Junio 04, 2013, 02:55:07 pm
por tar3kw0rm3d
Cheat-Sheet: JAVA - Hoja Guía para que no se me olvide

Iniciado por Denisse

Respuestas: 1
Vistas: 592
Último mensaje Julio 21, 2020, 12:43:49 pm
por DevCode
Tutorial: Traduccion de aplicaciones JAVA - Moviles [By :: SmartGenius :: ]

Iniciado por ProcessKill

Respuestas: 0
Vistas: 2517
Último mensaje Febrero 24, 2010, 04:26:07 pm
por ProcessKill