Para encontrar o valor de x
expressão y = x - x / 13
, perceba que temos uma subtração de números fracionários. Para subtrair números fracionários, faz-se o RMDC - Redução ao Mesmo Denominador Comum:
->
Obtém-se o MMC (Mínimo Múltiplo Comum dos denominadores. Como x - x / 13 equivale a x / 1 - x / 13, então temos os denominadores 1 e 13. Como 1 é o fator trivial fator de qualquer número, na prática faz-se:
13 / 1 = 13 * x = 13x
13 / 13 = 1 * x = x
Então, em RMDC: y = (13x - x) / 13
. Como queremos saber quanto vale x. Nós podemos fazer isso para todos o membros da equação. Logo:
13y / 13 = (13x - x) / 13
Daí tem uma propriedades das equações que, se os dois membros de uma equação são divididos ou multiplicados por um mesmo número, o resultado não se altera. Então, se pode descartar o fator ou divisor comum. Com efeito:
13y = 13x - x -> 13y = 12x
. Resolvendo: x = 13y / 12
Logo, para ‘encriptar’ usa-se y = x - x / 13
e para decriptar usa-se x = 13y / 12
.
Supondo 97 (a): y = 97 - 97 / 13 = 97 - 7 = 90
x = 13 * 90 / 12 -> 1.170 / 12 = 97,5
, logo 97.
No entanto, isso foi só o exemplo, pois na decriptação acontece alguns problemas relacionados às cadas decimais ignoradas. Por exemplo:
Se x = 64, y = 64 - 64 / 13 -> 64 - 4 = 60
.
x = 13y / 12 -> 13 * 60 / 12 -> 780 / 12 = 65
. Isso acontece porque 64/13
é aproximadamente 4,92, muito próximo de 5.
Então, você deve usar uma outra lei de formação que simplifique a construção e a desconstrução, ou alterar a forma como as coisas funcionam. Veja:
import java.util.Scanner;
public class Criptografia {
public static void main(String[] args){
Criptografia criptografia = new Criptografia();
String stringCriptografada = null;
String stringDecriptografada = null;
stringCriptografada = criptografia.criptografar();
System.out.print("\nResultado retornado criptografado: " + stringCriptografada);
stringDecriptografada = criptografia.decriptografar(stringCriptografada);
System.out.print("\nResultado retornado decriptografado: " + stringDecriptografada);
}
public String criptografar(){
Scanner leitor = new Scanner(System.in);
System.out.print("\nInforme o texto: ");
String texto = leitor.next();
String resultado = "";
char[] traduza = texto.toCharArray();
int valor = 0;
for(int i = 0; i < traduza.length; i++) {
valor = traduza[i];
traduza[i] = (char)(valor - valor / 13);
resultado += traduza[i];
}
System.out.println("\nResultado criptografado: " + resultado + "\nNúmero de caracteres: " + traduza.length);
return resultado;
}
public String decriptografar(String cripta){
char[] decriptado = cripta.toCharArray();
String resultado = "";
int valor = 0;
for(int i = 0; i < decriptado.length; i++) {
valor = decriptado[i];
decriptado[i] = (char)(13 * valor / 12);
resultado += decriptado[i];
}
System.out.println("\nResultado decriptografado: " + resultado + "\nNúmero de caracteres: " + decriptado.length);
return resultado;
}
}
Rodando…