JAVA:无法使用 xor 获取字符串中的加密数据

标签 java xor

我正在尝试使用字符串打印加密文本,也许我哪里错了。我正在对纯文本进行简单的异或运算。即将到来的加密文本/字符串我正在放入一个 C 程序并再次执行相同的异或以再次获得纯文本。

但在两者之间,我无法获得正确的加密文本字符串以传递给 C

String xorencrypt(byte[] passwd,int pass_len){
    char[] st = new char[pass_len];
    byte[] crypted = new byte[pass_len];
    for(int i = 0; i<pass_len;i++){
        crypted[i] = (byte) (passwd[i]^(i+1));
        st[i] = (char)crypted[i];
        System.out.println((char)passwd[i]+" "+passwd[i] +"= " + (char)crypted[i]+"   "+crypted[i]);/* characters are printed fine but problem is when i am convering it in to string */
    }
    return st.toString();
}    

我不知道是否还需要任何类型的编码,因为如果我这样做了,我将如何从 C 程序解码和解密。

假设 passwd = bond007

然后java程序应该返回akkb78>

进一步的 C 程序将再次解密 akkb78>bond007

最佳答案

使用

return new String(crypted);

在那种情况下你不需要st[]数组。

顺便说一下,bond007 的编码值是 cmm`560 而不是您发布的内容。

编辑
虽然上面的解决方案很可能适用于大多数 java 环境,但为了编码安全, 按照 Alex 的建议,为 String 构造函数提供编码参数。 例如,如果您希望字符串携带 8 位字节:

return new String(crypted, "ISO-8859-1");

从字符串中获取字节时需要相同的参数:

byte[] bytes = myString.getBytes("ISO-8859-1")


或者,使用 Alex 提供的解决方案:

return new String(st);

但是,转换 byteschars正确地:

st[i] = (char) (crypted[i] & 0xff);

否则,所有负字节,crypted[i] < 0不会转换为 char正确,你会得到令人惊讶的结果。

关于JAVA:无法使用 xor 获取字符串中的加密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305349/

相关文章:

java - 单击 JButton 后隐藏它

java - 程序在数组中查找与给定值异或的对

java - 两个明文字符串的异或解密

java - 来自 Amazon EC2 内部的间歇性 java.io.IOException : Connection reset (not connection reset by peer) in jdk. internal.net.http.HttpClientImpl.send

java - 将文件读入字节数组并将其传输到新文件中

java - 解释Euler's Totient Implementation的实现

Java Arraylist 列出所有元素

arrays - 数组中异或最大的两个元素

python - 什么是 Python symmetric_difference,它与 XOR 运算有何不同?

c++ - 给出一个整数,计算从零到该数字的异或值