仅使用大写的XOR加密

时间:2017-02-28 15:28:21

标签: java encryption xor

有没有办法只接收来自xor加密的大写字母和数字?或者更好的只有大写字母?或者我必须使用别的东西吗?

static private byte[] encryption(byte[] input, byte[] key){
    byte[] out = new byte[input.length];
    for(int i = 0; i < input.length; i++){
        out[i] = (byte) (input[i] ^ key[i%key.length]);
    }
    return out;
}

我还想再次解密它

3 个答案:

答案 0 :(得分:2)

您必须创建一种&#34;自定义XOR&#34; - 将允许的输入映射到前X个数字,XOR,然后将它们映射回来。

请注意,如果您只允许结果中包含大写字母,则只能允许这么多不同的字母&#34;输入(输入和输出字母表需要相同的大小)。

另请注意,除非与一次性打击垫一起使用,否则XOR非常不安全。如果攻击者可以猜测部分输入,他可以使用加密文本对其进行异或,并以纯文本形式查看(部分)您的密码 - 只要您输入密码,他们所需要的就是正确猜测输入的一部分。

答案 1 :(得分:1)

对于大写和数字,Base32是一种可能性。或者,使用十六进制(即Base16),但将16个十六进制数字映射到字母表的前16个字母。这只会以牺牲一些额外的编程和双倍的存储要求为代价来提供大写字母。 8位数据是16位十六进制字符。

答案 2 :(得分:0)

您可以在加密后添加其他编码步骤。如果您希望仅接收可打印字符并使用标准方法,则可以使用Base64编码。

如果您只想要大写字母或其他自定义格式,则需要制作自己的编码器和解码器。