使用XOR的密码/解密textArea文本

时间:2014-02-11 23:26:34

标签: java string char xor encryption

我有一个代码,在按下按钮后,应该使用某种String键从textArea中加密文本。问题是,这种方法只能使用一个字符而不是整个字符串来加密文本。我需要一个更长的键,所以这里需要字符串。我怎么能改变它?

btnCipher.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent klik) {
        String textToCipher = textArea.getText();
        String cipherKey = textField.getText();

        String cipheredText = "";
        int xor;
        char temp;

        for (int i=0; i<textToCipher.length(); i++){
            xor = textToCipher.charAt(i)^cipherKey; //error
            temp = (char)xor;
            cipheredText += temp;
        }
        textArea.setText(cipheredText);
    }
});

2 个答案:

答案 0 :(得分:-1)

将该行更改为:

xor = textToCipher.charAt(i) ^ cipherKey.charAt(i % cipherKey.length);

正如this post中所提到的,虽然String类并不介意存储带有不成对代理的字符串(实际上对于UTF-16格式无效),但是编译/解码时会遇到麻烦。其他字符集中的字符串以及使用与代码点相关的方法时。

答案 1 :(得分:-1)

如果您的字符串采用UTF-8编码,那么使用exclusive或两个字符串之间(假设片刻长度相等)可能不会产生有效的UTF-8结果(特别是,如果您使用UTF-8结果,则可能会创建一个“延续”字符你在同一个位置有“a”和“æ”。看here进行更深入的讨论。

您尝试处理的用例是什么?