这个Java代码解密的算法是什么?

时间:2016-05-23 03:56:48

标签: java encryption

在我正在研究的东西中,在解密方法中找到了与下面类似的Java代码:

//A char[] "key" and a ByteBuffer "input" already exists at this point.

int keyOffset = 0;
ByteBuffer output = ByteBuffer.allocate(Math.max(0, input.limit() - input.position())).order(ByteOrder.LITTLE_ENDIAN);
int length = input.limit();

for (int i = 0; i < length; i++) {
    output.put((byte)(256 + input.get(i) ^ key[keyOffset]));
    keyOffset = (keyOffset + 1) % key.length;
}

虽然可以从类和方法名称确定它是解密方法的事实,但是没有关于它正在解密的加密类型的描述,这就是我想在这个问题中提出的问题。

(我不知道代码的原作者是谁,所以我不能问他/她。 我认为,这可能不是“已知”加密,而是某种“原始”加密。在那种情况下,我会解决一个解释为什么可能的答案)

1 个答案:

答案 0 :(得分:2)

解密特别是这部分:

input.get(i) ^ key[keyOffset]

输入和键之间的XOR(^运算符是二进制XOR)(重复,因为键比输入短)。您可以在此处找到更多相关信息:https://en.wikipedia.org/wiki/XOR_cipher

XOR密码中最大的风险是纯文本攻击,因为input ^ output == key,所以如果有人可以猜到部分消息,那么密钥会立即显示,其余信息也随之显示。