【发布时间】:2019-01-29 18:59:41
【问题描述】:
我这里有一个密码作为二进制字符串:
01110101 01101000 01010100 01000100 01000011 01000100 00110111 00111000 00110110 00110010 00110100 01100111 00100110 00110000 00111001 00111000 00111101 ...
以及二进制字符串形式的消息:
01001000 01100001 01101100 01101100 01101111 01101100 01100101 01101100 01100101 01100001 01110011 01100100 01100110
我尝试了许多不同的方法来异或这两个字符串,这是我最近的尝试:
public static String encrypt(String str) {
String pwBinary = getBinaryString(pw);
String msgBinary = getBinaryString(str);
StringBuilder temp = new StringBuilder();
int count = 0;
for(int i = 0; i < msgBinary.length(); i++) {
if(!(i%8==count)) {
if(msgBinary.charAt(i) == pwBinary.charAt(i)) {
temp.append(0);
}else {
temp.append(1);
}
}else if(i!=0) {
temp.append(" ");
count++;
i++;
}
}
return temp.toString();
}
输出总是在中间的某个地方开始混乱......
0111101 0001001 0111000 0101000 0101100 0101000 1010010 1010100 10100110010100110010001110000000110010000000
我不知道如何正确填写空格:( 在此先感谢:-)
【问题讨论】:
-
请注意,每个位块的长度为 9,而不是 8,因为空间是块宽度的一部分。这说明
i % 8错了,应该是i % 9 -
if(!(msgBinary.charAt(i) != ' '))... 假设它们具有相同的模式。
-
我想我试过了,但它说我不能比较一个字符和一个字符串
标签: java encryption bit-manipulation bit