对于学校,我已按照以下要求获得加密四位数整数的任务。
公司希望通过电话传输数据,但它们是 担心他们的手机可能被窃听。他们所有的数据都是 以四位整数传输。他们要你写一个 将加密其数据以便可以进行更多传输的方法 牢固。您的方法应该读取一个四位整数并加密它 如下:将每个数字替换为(该数字加上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,但这不会起作用。
在做了一些研究之后,我不得不在某处搜索模数的左侧,但我完全不知道该怎么做。我是否需要在加密函数中返回那些并将它们传递给解密函数?
有人可以解释反转模数运算符的过程吗?
答案 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