English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Пример кода для выполнения операции исключения по модулю 2 для十六адцатеричных строк в Java

Введение: Давно не писал в блоге, в последнее время чувствую, что очень занят, все kinds of работы, которые нужно сделать. Я уверен, что многие работники офисов будут чувствовать так же. Недавно работал с NFC для записи карты, нужно вычислить контрольный бит. В большинстве случаев контрольный бит обычно вычисляется с помощью операции иксор предыдущих нескольких байт.

Теперь я сначала расскажу о своем использовании сцены:

Записать 16-битные данные на карту процессора (например, транспортную карту), последний байт - это контрольная сумма - все предыдущие 15 байт выполняют операцию иксор.

Я начал искать в Интернете другие написанные алгоритмы, но после вычислений результаты были неправильными, или они были слишком сложными, поэтому я написал один сам, который, на мой взгляд, также прост, и теперь я хочу поделиться им с вами, чтобы мы могли обсудить это вместе.

Первый раздел: Что такое операция иксор (главным образом摘自 Википедия, те, кто熟悉, могут пропустить)

Определение:

Иксор, англ. exclusive OR, или сокращенно xor

Исключающее ИЛИ (xor) - это математический оператор. Он используется в логических операциях. Математический символ исключающего ИЛИ (XOR) - «⊕», символ компьютера - «xor». Правила выполнения:

a ⊕ b = (¬a ∧ b) ∨ (a ∧ ¬b)

Если значения a и b различаются, результат исключающего ИЛИ (XOR) равен 1. Если значения a и b одинаковы, результат исключающего ИЛИ (XOR) равен 0.

Исключающее ИЛИ (XOR) также называется полусуммой, правила выполнения его аналогичны без кармана двоичному сложению: в двоичном представлении 1 используется для обозначения истинного значения, 0 - ложного, правила выполнения исключающего ИЛИ (XOR): 0 ⊕ 0 = 0, 1 ⊕ 0 = 1, 0 ⊕ 1 = 1, 1 ⊕ 1 = 0 (одинаковы 0, различны 1), эти правила аналогичны правилам сложения, только без кармана.

Исключающее ИЛИ (XOR) сокращенно называется XOR, EOR, EX-OR

В программе есть три оператора: XOR, xor, ⊕.

Метод использования:

z = x ⊕ y

z = xxory

Правила выполнения:

1. a ⊕ a = 0

2. a ⊕ b = b ⊕ a

3. a ⊕ b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;

4. d = a ⊕ b ⊕ c можно вывести a = d ⊕ b ⊕ c.

5. a ⊕ b ⊕ a = b.

6. Если x - это двоичное число 0101, y - это двоичное число 1011

Тогда x ⊕ y = 1110

Результат равен 1 только в том случае, если сравниваемые биты различаются, в противном случае результат равен 0

То есть «результат равен 0, если два входа одинаковы, а 1, если они различаются»!

Логика:

Логическое выражение: F = AB' ⊕ A'B ( (AB' ⊕ A'B) '= AB ⊙ A'B', ⊙ является операцией «согласно или»)

Логическая таблица истинности операции исключающего ИЛИ (XOR) показана на рисунке 1.

Показано, что его логический символ показан на рисунке 2. Логическая связь исключающего ИЛИ (XOR): когда A и B различаются, выход P = 1; когда A и B одинаковы, выход P = 0. «⊕» является символом операции исключающего ИЛИ (XOR), логическая операция исключающего ИЛИ (XOR) также является комбинацией логической операции ИЛИ, И, НЕ. Логическое выражение:

P = A ⊕ B

Из рисунка 1 можно увидеть, что правила операции исключающего ИЛИ (XOR):

0 ⊕ 0 = 0, 0 ⊕ 1 = 1

1 ⊕ 0 = 1, 1 ⊕ 1 = 0

Мnemonic: одинаковые биты дают 0, различные биты дают 1

Фактически, XOR в английском языке定义为 'either one (is one), but not both', то есть когда только один из них истинен (1), результат также истинен (1).

Использование:

Этот метод широко используется в компьютерах, логический символ исключающего ИЛИ (XOR) обычно обозначается как xor, а также как ⊕:

Истина ⊕ ложь = истина

Ложь ⊕ истина = истина

Ложь ⊕ ложь = ложь

Истина ⊕ истина = ложь

Или другими словами:

True ⊕ False = True

False ⊕ True = True

False ⊕ False = False

True ⊕ True = False

В некоторых языках программирования 1 используется для обозначения истинного значения, а 0 - ложного, поэтому два байта выполняются битово по правилу исключающего ИЛИ следующим образом:

Ниже приведена операция исключающего ИЛИ (XOR) для двух двоичных чисел:

В реальности используются десятичные числа, поэтому давайте посмотрим, как выполняется операция исключающего ИЛИ (XOR) для двух десятичных чисел:

5⊕2=?

1. Перед выполнением исчисления исключительного или значения都将 преобразовываться в двоичное представление:

5 и 2 представляют собой двоичные числа: 0101 и 0010

2. Переведем результат 0111 в десятичное: 7

3. Таким образом, 5⊕2=7

Изящное использование:

В отличие от других языков, в языках C и C++ исключительное или не используется xor,而是 "^", вводится с помощью Shift+6. (А в других языках "^" обычно означает возведение в степень)

Если нужно обменять значения двух переменных, кроме обычного использования промежуточной переменной для обмена, можно использовать исключительное или, чтобы обменять значения двумя переменными, например:

a=a^b;
b=b^a;
a=a^b;

Объяснение:

a1=a^b
b=a1^b
a=a1^b=a1^(a1^b)=a1^a1^b=b

Внимание:

a=a^b^(b=a); //such form is incorrect UB behavior, it will have different results in different compilers, do not use

Таким образом, был произведен обмен между a и b.

Таким образом: исключительное или одного и того же переменного с исключительным или другого переменного и его исключительного или равно этому переменному.

Пример использования: может быть использован на одном или нескольких этапах алгоритма шифрования, чтобы сделать алгоритм более сложным и трудным для взлома,提高了 безопасность.[1]

第二节:Реализация на языке Java:

private static String xor(String strHex_X, String strHex_Y) {
	// преобразование x и y в двоичное представление  
	String anotherBinary=Integer.toBinaryString(Integer.valueOf(strHex_X,16));
	String thisBinary=Integer.toBinaryString(Integer.valueOf(strHex_Y,16));
	String result = "";
	// проверка на 8-битное двоичное число, в противном случае добавление нулей слева  
	if(anotherBinary.length() != 8) {
		for (int i = anotherBinary.length(); i <8; i++) {
			anotherBinary = "0"+anotherBinary;
		}
	}
	if(thisBinary.length() != 8) {
		for (int i = thisBinary.length(); i <8; i++) {
			thisBinary = "0"+thisBinary;
		}
	}
	// исчисление исключительного или  
	for (int i=0; i<anotherBinary.length(); i++) {
		//Если значения в одинаковых позициях одинаковы, добавьте 0, в противном случае добавьте 1  
		if(thisBinary.charAt(i) == anotherBinary.charAt(i))  
		            result += "0"; else{
			result += "1";
		}
	}
	Log.e("code",result);
	return Integer.toHexString(Integer.parseInt(result, 2));
}

Внимание: вышеуказанный метод предназначен для операции xor между одним байтом шестнадцатеричной строки, например, для операции xor шестнадцатеричной строки из пятнадцати байт:

1312f70f900168d900007df57b4884
Сначала выполните разделение: 13 12 f7 0f 90 01 68 d9 00 00 7d f5 7b 48 84
13 xor 12 --> 1
1 xor f7 --> f6
f6 xor 0f --> f9
....
62 xor 84 --> e6

То есть, полученный一字节的 контрольный код составляет: e6
Дополнительно, для некоторых друзей был добавлен простой метод вызова,仅供参考:

public String checkcode_0007(String para){
	String[] dateArr = new String[15];
	try {
		dateArr[0] = para.substring(0, 2);
		dateArr[1] = para.substring(2, 4);
		dateArr[2] = para.substring(4, 6);
		dateArr[3] = para.substring(6, 8);
		dateArr[4] = para.substring(8, 10);
		dateArr[5] = para.substring(10, 12);
		dateArr[6] = para.substring(12, 14);
		dateArr[7] = para.substring(14, 16);
		dateArr[8] = para.substring(16, 18);
		dateArr[9] = para.substring(18, 20);
		dateArr[10] = para.substring(20, 22);
		dateArr[11] = para.substring(22, 24);
		dateArr[13] = para.substring(26, 28);
		dateArr[14] = para.substring(28, 30);
		catch (Exception e) {
	}
	// TODO: обработка исключений
		String code = "";
	}
	for (int i = 0; i < dateArr.length-1; i++) {
	if (i == 0) {
		code = xorString(dateArr[i], dateArr[i+1]);
			else {
		}
			code = xorString(code, dateArr[i]);
		}
	}
	return code;
}

Затем вызовите это в main функции или другом методе:

String code = checkcode_0007("1312f70f900168d900007df57b4884"); 

code - это полученный контрольный код.

Обобщение

Вот весь пример кода для реализации алгоритма XOR для шестнадцатеричных строк в Java, который мы рассмотрели в этой статье. Надеюсь, это поможет вам. Те, кто интересуется, могут продолжить читать другие связанные темы на этом сайте, и если есть недостатки, пожалуйста, оставляйте комментарии. Спасибо за поддержку нашего сайта!

Объявление: содержимое статьи взято из Интернета, авторские права принадлежат соответствующему владельцу, материалы предоставлены пользователями Интернета, веб-сайт не имеет права собственности, материалы не редактировались вручную, и не несут ответственности за соответствующие юридические вопросы. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. При обнаружении фактов нарушения, сайт немедленно удаляет涉嫌侵权的内容.

Основной учебник
Вам может понравиться