XOR - 3 行的解释
XOR - Explaining of 3 lines
我们正在做一个学校项目,我们需要逐行解释代码。我们需要解释以下3行:
// TODO: This is where the magic of XOR is happening. Are you able to explain what is going on?
for (int i = 0; i < rawString.length(); i++) {
thisIsEncrypted.append((char) (rawString.charAt(i) ^ key[i % key.length]));
}
有人可以帮助我们吗?这是我们需要完成的最后几行。
提前致谢! :-)
此致,
卡斯帕
如果您查看按位运算 XOR,它会执行以下操作:
0^0 = 0
1^0 = 1
0^1 = 1
1^1 = 0
这对加密非常有用,因为如果您有:
original_value ^ key = encrypted_value
然后 encrypted_value 可以通过使用相同的密钥进行异或转换回 original_value:
encrypted_value ^ key = original_value
因此,在您的示例中,您有一个原始字符串,然后是加密字符串,并为原始脚本中的每个字符对其进行加密,它使用与密钥中的字符进行 XOR。由于密钥长度与原始字符串长度不同,因此它使用模数 (%) 来获取密钥的相应位置。例如,如果它们的键长 3 个字符,则原始字符串中的每三个字符将使用键中的相同字符进行编码。
基本上执行相反的调用会将您的加密字符串传输回原始字符串。举例说明:
String rawString="Give me A on my homework!";
char[] key="OH no!".toCharArray();
StringBuilder thisIsEncrypted=new StringBuilder();
for (int i = 0; i < rawString.length(); i++) {
thisIsEncrypted.append((char) (rawString.charAt(i) ^ key[i % key.length]));
}
// Now we have encrypted it - lets decrypt
rawString=thisIsEncrypted.toString();
thisIsEncrypted=new StringBuilder();
for (int i = 0; i < rawString.length(); i++) {
thisIsEncrypted.append((char) (rawString.charAt(i) ^ key[i % key.length]));
}
System.out.println("This was encrypted and then decrypted: "+thisIsEncrypted);
我们正在做一个学校项目,我们需要逐行解释代码。我们需要解释以下3行:
// TODO: This is where the magic of XOR is happening. Are you able to explain what is going on?
for (int i = 0; i < rawString.length(); i++) {
thisIsEncrypted.append((char) (rawString.charAt(i) ^ key[i % key.length]));
}
有人可以帮助我们吗?这是我们需要完成的最后几行。
提前致谢! :-)
此致, 卡斯帕
如果您查看按位运算 XOR,它会执行以下操作:
0^0 = 0
1^0 = 1
0^1 = 1
1^1 = 0
这对加密非常有用,因为如果您有:
original_value ^ key = encrypted_value
然后 encrypted_value 可以通过使用相同的密钥进行异或转换回 original_value:
encrypted_value ^ key = original_value
因此,在您的示例中,您有一个原始字符串,然后是加密字符串,并为原始脚本中的每个字符对其进行加密,它使用与密钥中的字符进行 XOR。由于密钥长度与原始字符串长度不同,因此它使用模数 (%) 来获取密钥的相应位置。例如,如果它们的键长 3 个字符,则原始字符串中的每三个字符将使用键中的相同字符进行编码。
基本上执行相反的调用会将您的加密字符串传输回原始字符串。举例说明:
String rawString="Give me A on my homework!";
char[] key="OH no!".toCharArray();
StringBuilder thisIsEncrypted=new StringBuilder();
for (int i = 0; i < rawString.length(); i++) {
thisIsEncrypted.append((char) (rawString.charAt(i) ^ key[i % key.length]));
}
// Now we have encrypted it - lets decrypt
rawString=thisIsEncrypted.toString();
thisIsEncrypted=new StringBuilder();
for (int i = 0; i < rawString.length(); i++) {
thisIsEncrypted.append((char) (rawString.charAt(i) ^ key[i % key.length]));
}
System.out.println("This was encrypted and then decrypted: "+thisIsEncrypted);