java - XOR 加密包含空格的位字符串时出现问题
问题描述
我在这里有一个密码作为二进制字符串:
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
我不知道如何正确处理空格:(提前致谢:-)
解决方案
我找到了一个简单的解决方案,尽管我花了一段时间才发现我的推理错误:
public static String encrypt(String str) {
String pwBinary = getBinaryString(pw);
String msgBinary = getBinaryString(str);
StringBuilder temp = new StringBuilder();
int x = 8;
for(int i = 0; i < msgBinary.length(); i++) {
if(i == x) {
temp.append(" ");
x+=9;
}else if(msgBinary.charAt(i) == pwBinary.charAt(i)) {
temp.append(0);
}else {
temp.append(1);
}
}
return temp.toString();
}
推荐阅读
- python-3.x - 我想安装 streamlit 但在 pyarrow 中出现错误
- sql - 选择分组查询的前 n 行
- node.js - 节点包串口给出垃圾输出
- aws-lambda - DynamoDB DocumentClient.put 意外返回 DynamoDB.putItem 错误
- xcode - XCODE 12 中通常显示的 3D 场景不起作用
- spring-boot - 带有springboot的Log4j2.xml没有生成日志文件
- asp.net-core - 在 Blazor 中发送 POST 请求后丢失 UI 线程
- spring - Spring动态异步
- javascript - 如何启用(进度条/加载图标)冻结屏幕?
- sql - 在 SQL 中选择具有一个最大值但另一个最小值的项目