反转模数运算符以进行解密

时间:2016-10-02 20:19:24

标签: java arrays oop encryption

对于学校,我已按照以下要求获得加密四位数整数的任务。

  

公司希望通过电话传输数据,但它们是   担心他们的手机可能被窃听。他们所有的数据都是   以四位整数传输。他们要你写一个   将加密其数据以便可以进行更多传输的方法   牢固。您的方法应该读取一个四位整数并加密它   如下:将每个数字替换为(该数字加上7的总和)   模数10.然后,将第二个数字与第四个数字交换。然后打印   加密的整数。写一个输入的单独方法   加密的四位整数,并将其解密以形成原始   号。

加密四位数并不是问题所在,我已将其转换为字符串,然后转换为char数组,然后根据需要单独加密数字。

我制作的方法如下:

public int encrypt4DigitNumber(int number) throws Exception {
    String numberAsString = String.valueOf(number);
    if (numberAsString.length() != 4) {
        throw new Exception("The digit has to be 4 digits long");
    }
    int[] numbers = new int[4];

    char[] numbersAsChars = numberAsString.toCharArray();
    for (int index = 0; index < numbersAsChars.length; index++) {
        int currentNumber = Character.getNumericValue(numbersAsChars[index]);
        int numberToReplace = (currentNumber + 7) % 10;

        numbers[index] = numberToReplace;
    }

    int second = numbers[1];
    int fourth = numbers[3];

    numbers[1] = fourth;
    numbers[3] = second;

    StringBuilder encryptedNumberStringBuilder = new StringBuilder();
    for (int encryptedNumber : numbers) {
        encryptedNumberStringBuilder.append(encryptedNumber);
    }

    String encryptedNumberString = encryptedNumberStringBuilder.toString();
    return Integer.parseInt(encryptedNumberString);
}

当我不得不解密加密的四位数代码时出现问题。

我知道我必须交换2个数组元素,并将7添加到数组中的每个数字。

我不知道怎么做的是反转模数运算符,我唯一想到的就是将当前数乘以10,但这不会起作用。

在做了一些研究之后,我不得不在某处搜索模数的左侧,但我完全不知道该怎么做。我是否需要在加密函数中返回那些并将它们传递给解密函数?

有人可以解释反转模数运算符的过程吗?

2 个答案:

答案 0 :(得分:1)

如果使用偏移量7加密0到9(= mod 10)的数字,当然可以在解密期间减去每个数字的偏移量,如果数字为负数则换行,但这不是很好:

int numberToReplace = currentNumber - 7;
if (numberToReplace < 0) {
    numberToReplace += 10;
}

如果加密偏移量为7,则解密偏移量为3(10 - 7)。您可以为每个数字添加3并应用mod 10以解密它们。

int numberToReplace = (currentNumber + 3) % 10;

答案 1 :(得分:0)

让我们看看实际上(i + 7)%10做了什么:

0 = 7
1 = 8
2 = 9
3 = 0
4 = 1
5 = 2
6 = 3
7 = 4
8 = 5
9 = 6

正如你所看到的,肯定是非常明显的模式。所以为了解码我们的原始数字,我们必须做

(i + 3) % 10