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

Exemplo de código de operação XOR em hexadecimal em Java

Prefácio: Não escrevi um blog há muito tempo, e nos últimos um ano, senti que estava muito ocupado, com muitos trabalhos que não conseguem ser concluídos. Acredito que muitos trabalhadores também têm essa sensação. Recentemente, ao fazer operações de gravação NFC, foi necessário calcular um bit de verificação. Geralmente, o bit de verificação é calculado através da operação XOR dos primeiros bytes.

Agora, vou explicar primeiro o cenário que estou usando:

Coloque um16Os dados dos bytes são escritos no cartão de CPU (como o cartão de transporte), o último byte é o código de verificação---Os primeiros quinze bytes do XOR.

Eu comecei a procurar alguns algoritmos escritos por outras pessoas na internet e descobri que os resultados calculados estavam errados ou que eram muito complexos, então eu escrevi um, achei que também era simples, e agora compartilho com todos, espero que possamos trocar algumas ideias.

Primeira seção: O que é a operação XOR (principalmente extraído do Baidu Baike, os meninos que estão familiarizados podem pular)

Definição:

O XOR, em inglês, é exclusive OR, ou abreviado como xor

O XOR (xor) é um operador matemático. Ele é aplicado às operações lógicas. O símbolo matemático do XOR é “⊕”, e o símbolo computacional é “xor”. Suas regras de operação são:

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

Se os valores de a e b forem diferentes, o resultado do XOR será1。Se os valores de a e b forem iguais, o resultado do XOR será 0.

O XOR também é chamado de operação de semi-adição, suas regras de operação são equivalentes à adição binária sem carry: no sistema binário, usa-se1representa verdadeiro, 0 representa falso, então as regras de operação do XOR são: 0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(ambos são 0, diferentes são1),esses princípios são os mesmos que a adição, apenas sem carry.

O XOR é abreviado como XOR, EOR, EX-OR

No programa há três operadores: XOR, xor, ⊕.

Método de uso:

z=x⊕y

z=xxory

Regras de operação:

1.a⊕a=0

2.a⊕b=b⊕a

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

4.d=a⊕b⊕c pode ser deduzido que a=d⊕b⊕c.

5.a⊕b⊕a=b.

6.Se x é um número binário 0101,y é um número binário1011

então x⊕y=1110

Só quando os bits comparados são diferentes, o resultado é1,de outra forma o resultado é 0

Isso é, 'dois entradas iguais são 0, diferentes são1”!

Lógica:

Expressão lógica: F=AB'⊕A'B((AB'⊕A'B)'=AB⊙A'B',⊙ é a operação de 'ou igual')

A tabela de verdade da lógica XOR é como1Most

Mostrado, o símbolo lógico é como2Mostrado. A relação lógica XOR é: quando AB são diferentes, a saída é P=1;Quando AB são iguais, a saída é P=0.“⊕” é o símbolo de operação XOR, a lógica XOR é uma combinação de lógica AND, OR e NOT, a expressão lógica é:

P=A⊕B

Como mostrado no1Portanto, as regras da operação XOR são

0⊕0=0,0⊕1=1

1⊕0=1,1⊕1=0

Mnemonic: igual pega 0, diferente pega1

Na verdade, XOR em inglês é definido como eitherone(isone),butnotboth, ou seja, apenas um é verdadeiro (1)时,取真(1)。

Função:

É amplamente aplicado em computadores, o símbolo lógico XOR geralmente é xor, também pode ser ⊕:

Verdadeiro⊕Falso=True

Falso⊕Verdadeiro=True

Falso⊕Falso=Falso

Verdadeiro⊕Verdadeiro=Falso

ou seja:

True⊕False=True

False⊕True=True

False⊕False=False

True⊕True=False

Alguns idiomas de computador usam1Representa verdadeiro, usa 0 para falso, então a XOR bit a bit de dois bytes é como follows

A seguir é a operação XOR de dois números binários:

Na realidade, os valores decimais são usados na prática, então vamos ver como dois valores decimais fazem a operação XOR:

5⊕2=?

1.Antes de calcular XOR, converta os valores para binário:

5e2Converter para binário, respectivamente: 0101、0010

2.Depois de obter o resultado 0111.Converter para decimal:7

3.Portanto5⊕2=7

Truque:

Diferente de outras linguagens, o C e o C++Em outras linguagens, XOR não é usado, mas “^”, a tecla de entrada é Shift+6。(Outras linguagens de programação geralmente usam “^” para representar a potência)

Se precisar trocar os valores de duas variáveis, além do uso comum de uma variável intermediária para troca, também pode usar XOR, trocando apenas com duas variáveis, por exemplo:

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

Explicação detalhada:

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

Atenção:

a=a^b^(b=a);//Este tipo de forma é um comportamento UB incorreto, que pode resultar em diferentes resultados em diferentes compiladores. Não use.

Dessa forma, concluímos a troca de a e b.

Portanto, XOR entre a mesma variável e o XOR de outra variável e seu valor XOR é igual ao próprio valor.

Exemplo de uso: Pode ser usado em um ou mais estágios de algoritmos de criptografia, tornando o algoritmo mais complexo, mais difícil de ser quebrado e mais seguro. [1]

Segunda seção: Implementação em linguagem Java:

private static String xor(String strHex_X,String strHex_Y){
	//  
	16));
	String thisBinary=Integer.toBinaryString(Integer.valueOf(strHex_Y,16));
	String result = "";
	//Juzgue se é8binário, caso contrário, complete à esquerda com zeros  
	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;
		}
	}
	//Operação XOR  
	for (int i=0;i<anotherBinary.length();i++{
		//Se os números na mesma posição forem iguais, complemente com 0, caso contrário, complemente1  
		if(thisBinary.charAt(i)==anotherBinary.charAt(i))  
		            result+="0"; else{
			result+="1";
		}
	}
	Log.e("code",result);
	return Integer.toHexString(Integer.parseInt(result, 2));
}

Atenção: O método acima é aplicável ao cálculo de XOR entre um byte em uma string hexadecimal, por exemplo, para a operação XOR de uma string hexadecimal de 15 bytes:

1312f70f900168d900007df57b4884
Primeiro, vamos fazer a divisão: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

Ou seja, o código de verificação de um byte obtido é: e6
Suplementação, adicionou um método de chamada simples para alguns amigos, apenas para referência:

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[12] = para.substring(24, 26);
		dateArr[13] = para.substring(26, 28);
		dateArr[14] = para.substring(28, 30);
	}
	catch (Exception e) {
		// TODO: lidar com exceção
	}
	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;
}

A seguir, chame isso dentro da função principal ou outra função:

String code = checkcode_0007"1312f70f900168d900007df57b4884; 

code é o código de verificação obtido.

Resumo

Isso é todo o conteúdo deste artigo sobre o exemplo de código de implementação da operação de XOR de strings hexadecimal em Java. Espero que ajude. Amigos interessados podem continuar a ler outros tópicos relacionados neste site. Se houver点什么不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Declaração: O conteúdo deste artigo é proveniente da Internet, pertence ao respectivo proprietário e foi submetido e carregado voluntariamente pelos usuários da Internet. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas. Caso seja confirmada, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar