XOR十六进制ascii字母值

时间:2014-01-13 18:17:27

标签: java math cryptography

我正在努力完成一些功课,而且我完全难过了。我需要执行的函数是,给定字符的十六进制值,xor与另一个十六进制值来验证已知的结束值。

给出一个简单的例子(给我的一个),我知道'Bob'的ascii值将是[42,6F,62],而'Eve'将是[45,76,65]。我必须将[07,16,17]的'鲍勃'的价值与“夏娃”进行异或。

我认为xor只是添加模数基础,但只是使用Microsoft计算器:(42 + 45)mod 16 = 3但是42 XOR 45 = 7.我不明白XOR函数将如何完成。有人可以解释一下吗?

提前致谢

我试过

float l = (6F)^(16);
System.out.println(l);

并得到了这个例外:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - bad operand types for binary operator '^'
  first type:  float
  second type: double
    at p2p_example.P2P_Example.main(P2P_Example.java:40)
Java Result: 1

2 个答案:

答案 0 :(得分:1)

XOR是按位异或 - ,

42 = 1000010
45 = 1000101

 7 = 0000111

如果两个位中有一个(并且只有一个)是XORd,那么这是一个。对于Java,您可以使用parseInt并传入基数,例如

public static void main(String[] args) {
    int a = Integer.parseInt("42", 16);
    int b = Integer.parseInt("45", 16);
    System.out.println(Integer.toString(a ^ b, 16));
}

打印

7

答案 1 :(得分:1)

0x42 + 0x45 = 0x87
            = 135

135 % 16 = 7 = 0x07

我认为你在十六进制和十进制基数之间感到困惑(尽管(42 + 45)%16也恰好是十进制的7;所以也许你只是把数学做错了?)