首页 > 解决方案 > 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

我不知道如何正确处理空格:(提前致谢:-)

标签: javaencryptionbit-manipulationbit

解决方案


我找到了一个简单的解决方案,尽管我花了一段时间才发现我的推理错误:

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();
    }

推荐阅读