1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
public static String XOR(String varData1, String varData2) {
String out = "";
if (varData1.length() == varData2.length()) {
byte[] ta = hex2BinArray(varData1);
byte[] tb = hex2BinArray(varData2);
for (int i = 0; i < ta.length; i++) {
ta[i] = (byte) (ta[i] ^ tb[i]);
}
out = MacrosInterface.binArray2Hex(ta);
}
return out.toUpperCase();
}
/**
* transform an hex string (representing bytes) in a byte array<br>
* ex : "12AB" => [(byte)0x12],[(byte)0xAB]
* @param String intput hexadecimal string
* @return byte[]
*/
public static byte[] hex2BinArray(String input) {
if ((input.length() % 2) == 0) {
byte[] output = new byte[input.length() / 2];
for (int i = 0; i < (input.length() / 2); i++) {
output[i] = (byte) Integer.parseInt(
input.substring(i * 2, (i * 2) + 2), 16);
}
return output;
} else {
return null;
}
}
/**
* transform a byte array in an hex string<br>
* ex : [(byte)0x12],[(byte)0xB] => "120B"
* @param byte[] intput byte array
*/
public static String binArray2Hex(byte[] input) {
StringBuffer output = new StringBuffer("");
if (input != null) {
for (int i = 0; i < input.length; i++) {
short intern = (short) (input[i] & (short) 0x00FF);
output.append(leftZeroPad(Integer.toHexString(intern), 2));
}
}
return output.toString().toUpperCase();
}
/**
* add "0" to the left of the input string until length equals digitNumber value
* @param String input
* @param int digitNumber final number of digit
*/
public static String leftZeroPad(String input, int digitNumber) {
String out = "";
if (input != null) {
out = input;
}
if (digitNumber > out.length()) {
while (out.length() < digitNumber)
out = "0" + out;
}
return out.toUpperCase();
} |