将字符串解密为Byte数组

时间:2014-04-11 16:31:16

标签: java

我正在加密一个只包含0和1的字符串数组,如下所示:

public String[] binaryToText1(String[] binary1, int lengthofshares) {
    String[] encrptedfinally = new String[lengthofshares];
    for(int tt = 0; tt < lengthofshares; tt++) {
        String ss2 = "";
        String ss = binary1[tt];
        String mynextChar;
        ss2 = new java.math.BigInteger(ss, 2).toString(16);
        encrptedfinally[tt] = ss2;
    }
    return encrptedfinally;
}

这里lengthofshares只是字符串数组binary1的大小。但是当我试图将它转换回0和1的String数组时,我卡住了 我无法想出解决方案。

解密功能有点像这样:

public String[] textToBinary(String[] alpha, int myK) {
    String[] ans = new String[myK + 3];
    for(int t = 0; t < myK; t++) {
        String s = alpha[t];
        byte bytes[] = new byte[s.length()];
        char c[] = s.toCharArray();
        int i;
        for(i = 0; i < s.length(); i++) {
            bytes[i] = (byte) c[i];
        }
        StringBuilder binary = new StringBuilder();
        for(byte b : bytes) {
            int val = b;
            for(i = 0; i < 8; i++) {
                binary.append((val & 128) == 0 ? 0 : 1);
                val <<= 1;
            }
        }
        ans[t] = binary.toString();
    }
    return ans;
}

但结果有所不同。请帮助。我们无法理解它的错误

1 个答案:

答案 0 :(得分:0)

不幸的是,我不太了解您的代码,而且我也无法弄清楚您是否只想进行简单的字符串到字节转换,或者您是否也想进行一些天真的加密。

无论如何,我认为下面的代码完成了你想要的大部分内容。它使用位掩码从0到255整数中提取表示char(char + 127)的整数。

类似地,它使用按位OR将字符串的二进制String []表示形式转换回字符,最后返回字符串。

public static void main(String[] args)
{
    String test = "Don't worry, this is just a test";
    List<String> binary = stringToBinary(test);
    System.out.println(binary);
    System.out.println(binaryToString(binary));
}

public static List<String> stringToBinary(String input)
{
    LinkedList<String> binary = new LinkedList<String>();
    char[] input_char = input.toCharArray();
    for (int c = input_char.length - 1 ; c >= 0; c--)
    {
        int charAsInt = input_char[c] + 127; // Char range is -127 to 128. Convert to 0 to 255
        for (int n = 0; n < 8; n++)
        {
            binary.addFirst((charAsInt & 1) == 1 ? "1" : "0");
            charAsInt >>>= 1;
        }
    }
    return binary;
}

public static String binaryToString(List<String> binary)
{
    char[] result_char = new char[binary.size() / 8];
    for (int by = 0; by < binary.size() / 8; by++)
    {
        int charAsInt = 0;
        for (int bit = 0; bit < 8; bit++)
        {
            charAsInt <<= 1;
            charAsInt |= binary.get(by * 8 + bit).equals("1") ? 1 : 0; 
        }
        result_char[by] = (char) (charAsInt - 127);
    }
    return new String(result_char);
}