在我正在研究的东西中,在解密方法中找到了与下面类似的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;
}
虽然可以从类和方法名称确定它是解密方法的事实,但是没有关于它正在解密的加密类型的描述,这就是我想在这个问题中提出的问题。
(我不知道代码的原作者是谁,所以我不能问他/她。
我认为,这可能不是“已知”加密,而是某种“原始”加密。在那种情况下,我会解决一个解释为什么可能的答案)
答案 0 :(得分:2)
解密特别是这部分:
input.get(i) ^ key[keyOffset]
输入和键之间的XOR(^
运算符是二进制XOR)(重复,因为键比输入短)。您可以在此处找到更多相关信息:https://en.wikipedia.org/wiki/XOR_cipher
XOR密码中最大的风险是纯文本攻击,因为input ^ output == key
,所以如果有人可以猜到部分消息,那么密钥会立即显示,其余信息也随之显示。