Java 在给定余数时查找红利

Java 在给定余数时查找红利,java,encryption,Java,Encryption,我已经写了一个程序,在其中我加密用户输入。输入只有四位数长。加密公式如下: 要求用户输入4位数字 一个接一个地迭代,并在其中添加7。 用10除以每个数的余数。 用3交换1,用4交换2。 假设我输入了1234。在每个数字中加上数字7后,数字看起来像891011。其余的数字是8901。现在我交换这些,最后的数字看起来像0189。这都是关于加密程序的 USER INPUT : 0189 现在,我必须编写另一个单独的程序来解密用户的输入,并找出实际的数字。我面临的问题是,我必须首先找到股息。但给定的数

我已经写了一个程序,在其中我加密用户输入。输入只有四位数长。加密公式如下:

要求用户输入4位数字 一个接一个地迭代,并在其中添加7。 用10除以每个数的余数。 用3交换1,用4交换2。 假设我输入了1234。在每个数字中加上数字7后,数字看起来像891011。其余的数字是8901。现在我交换这些,最后的数字看起来像0189。这都是关于加密程序的

USER INPUT : 0189

现在,我必须编写另一个单独的程序来解密用户的输入,并找出实际的数字。我面临的问题是,我必须首先找到股息。但给定的数据是除数和余数,在这里是10和0。如果我错了,请指导我。提前感谢。

翻译表没有显示任何副本,因此这里没有问题:

n    +7   %10
--------------
0 =>  7 => 7
1 =>  8 => 8
2 =>  9 => 9
3 => 10 => 0
4 => 11 => 1
5 => 12 => 2
6 => 13 => 3
7 => 14 => 4
8 => 15 => 5 
9 => 16 => 6
因此,要解密:

解开数字 每个数字减去7,如果结果为负数,则加10或使用翻译表
翻译表没有显示任何重复项,因此这里没有问题:

n    +7   %10
--------------
0 =>  7 => 7
1 =>  8 => 8
2 =>  9 => 9
3 => 10 => 0
4 => 11 => 1
5 => 12 => 2
6 => 13 => 3
7 => 14 => 4
8 => 15 => 5 
9 => 16 => 6
因此,要解密:

解开数字 每个数字减去7,如果结果为负数,则加10或使用翻译表
让我们做一些计算:

每个原始数字的范围从0到9

添加7后,每个值的范围为7到16

除以10后,7到9之间的任何数字都是相同的;从10到16的任何x数范围都将从0到6。 要查找原始数字,请对最后的每个数字执行以下操作

如果x 6原始=x-7


让我们做一些计算:

每个原始数字的范围从0到9

添加7后,每个值的范围为7到16

除以10后,7到9之间的任何数字都是相同的;从10到16的任何x数范围都将从0到6。 要查找原始数字,请对最后的每个数字执行以下操作

如果x 6原始=x-7


我用一个简单的JAVA程序进行了尝试,没有任何问题

如果您想试一试,下面是代码片段:

public static void main (String[] args)
{
    Scanner in = new Scanner(System.in);
    /* Start Encrypting */
    String encrypted = encrypt(in.nextInt(), 4);
    System.out.println("Encrypted: " + encrypted);
    /* Start Decrypting */
    String decrypted = decrypt(encrypted, 4);
    System.out.println("Decrypted: " + decrypted);
}

/* Encryption Logic */
public static String encrypt(int x, int size) {
    int[] output = new int[size];
    /* Add 7, Mod 10 Logic */
    for(int i = size - 1; x > 0; i--) {
        output[i] = ((x % 10) + 7) % 10; 
        x /= 10;
    }
    /* Swap Logic */
    for(int i = 0; i < size/2; i++) {
        int temp = output[i];
        output[i] = output[i+2];
        output[i+2] = temp;
    }
    /* Return Result */
    return Arrays.toString(output).replace(", ","").substring(1,size+1);
}

/* Decryption Logic */
public static String decrypt(String x, int size) {
    /* Get Chars */
    char[] input = x.toCharArray();
    int[] output = new int[size];
    /* Sub 7, Mod 10 Logic */
    for(int i = 0; i < input.length; i++) {
        output[i] = (((int)(input[i]) - 48) + 3) % 10;
    }
    /* Swap Logic */
    for(int i = 0; i < size/2; i++) {
        int temp = output[i];
        output[i] = output[i+2];
        output[i+2] = temp;
    }
    /* Return Result */
    return Arrays.toString(output).replace(", ","").substring(1,size+1);
}
输出:

Encrypted: 0189
Decrypted: 1234

我用一个简单的JAVA程序进行了尝试,没有任何问题

如果您想试一试,下面是代码片段:

public static void main (String[] args)
{
    Scanner in = new Scanner(System.in);
    /* Start Encrypting */
    String encrypted = encrypt(in.nextInt(), 4);
    System.out.println("Encrypted: " + encrypted);
    /* Start Decrypting */
    String decrypted = decrypt(encrypted, 4);
    System.out.println("Decrypted: " + decrypted);
}

/* Encryption Logic */
public static String encrypt(int x, int size) {
    int[] output = new int[size];
    /* Add 7, Mod 10 Logic */
    for(int i = size - 1; x > 0; i--) {
        output[i] = ((x % 10) + 7) % 10; 
        x /= 10;
    }
    /* Swap Logic */
    for(int i = 0; i < size/2; i++) {
        int temp = output[i];
        output[i] = output[i+2];
        output[i+2] = temp;
    }
    /* Return Result */
    return Arrays.toString(output).replace(", ","").substring(1,size+1);
}

/* Decryption Logic */
public static String decrypt(String x, int size) {
    /* Get Chars */
    char[] input = x.toCharArray();
    int[] output = new int[size];
    /* Sub 7, Mod 10 Logic */
    for(int i = 0; i < input.length; i++) {
        output[i] = (((int)(input[i]) - 48) + 3) % 10;
    }
    /* Swap Logic */
    for(int i = 0; i < size/2; i++) {
        int temp = output[i];
        output[i] = output[i+2];
        output[i+2] = temp;
    }
    /* Return Result */
    return Arrays.toString(output).replace(", ","").substring(1,size+1);
}
输出:

Encrypted: 0189
Decrypted: 1234