Prefácio: não escrevo um blog há muito tempo. Eu me sinto tão ocupado no ano passado e tenho um trabalho sem fim a fazer. Eu acredito que muitos funcionários de escritório se sentirão assim. Recentemente, realizei uma operação de redação de cartões na NFC e preciso calcular um bit de verificação. De um modo geral, a maioria dos bits de verificação é obtida pela operação XOR dos primeiros bytes.
Agora, deixe -me falar sobre os cenários que eu uso:
Escreva um dados de 16 bytes no cartão da CPU (como um cartão de trânsito), e o último byte é o código de verificação-os primeiros quinze bytes xor.
Comecei a procurar alguns algoritmos escritos por outros na Internet e descobri que o resultado do cálculo estava errado ou a escrita era muito complicada, então escrevi um, o que sentia que era relativamente simples. Agora vou compartilhar com você, espero me comunicar com vocês juntos.
Seção 1: O que é operação XOR (principalmente extraída da Enciclopédia Baidu, as botas infantis familiares podem ser ignoradas)
definição:
Exclusivo, o inglês é exclusivo ou abreviado como xor
XOR é um operador matemático. É aplicado a operações lógicas. O símbolo matemático de Xor é "", e o símbolo do computador é "xor". O algoritmo é:
AB = (¬a∧b) ∨ (a∧−b)
Se os valores A e B não forem os mesmos, o resultado XOR será 1. Se os valores A e B forem os mesmos, o resultado XOR será 0.
Exclusivo ou também é chamado de operação semi-adição. Seu algoritmo é equivalente à adição binária sem transporte: no binário, 1 é usado para representar verdadeiro e 0 é falso, então o algoritmo de exclusivo ou é: 00 = 0, 10 = 1, 01 = 1, 11 = 0 (ambos são 0, diferentes são 1). Essas leis são as mesmas da adição, mas não carregam.
XOR é referido como XOR, EOR e ex-OR
Existem três tipos de operadores no programa: XOR, XOR e.
Como usá -lo é o seguinte
z = xy
z = xxory
Regras de operação:
1.aa = 0
2.AB = BA
3.ABC = A (BC) = (AB) C;
4.D = ABC pode deduzir a = dbc.
5.ABA = b.
6. Se x é o número binário 0101, y é o número binário 1011
Então xy = 1110
Somente quando os dois bits de comparação são diferentes, o resultado é 1, caso contrário, o resultado é 0
Ou seja, "quando duas entradas são iguais, elas são 0 e, quando são diferentes, são 1"!
lógica:
Expressão lógica: f = ab'a'b ((ab'a'b) '= ab⊙a'b', ⊙ é o "mesmo ou" operação)
A tabela de verdade da lógica XOR é mostrada na Figura 1
Os símbolos lógicos são mostrados na Figura 2. A relação entre a lógica XOR é: Quando AB é diferente, saída P = 1; Quando AB é o mesmo, saída P = 0. "" é um símbolo de operação XOR, e a lógica XOR também é uma combinação ou não-lógica, e sua expressão lógica é:
P = ab
Na Figura 1, as regras da operação XOR são
00 = 0,01 = 1
10 = 1,11 = 0
Fórmula mental: 0 é a mesma, 1 é o mesmo
De fato, o XOR é definido em inglês como (isone), mas não muito, ou seja, quando apenas um é verdadeiro (1), se torna verdadeiro (1).
efeito:
É comumente usado em computadores. O símbolo lógico de XOR é geralmente usado com XOR, o que também é útil:
Verdadeiro ou falso = verdadeiro
False true = verdadeiro
False = false
True = false
Ou:
Truefalse = true
Falsetrue = True
Falsefalse = false
Truetrue = false
Algumas linguagens de computador usam 1 para representar verdadeiro e 0 para representar falsas, para que os dois bytes sejam exclusivos bit ou o seguinte
A seguir, são apresentados dois valores binários para o cálculo XOR:
Na realidade, os valores decimais são usados, então vamos dar uma olhada em como dois valores decimais são calculados para XOR:
52 =?
1. Antes de executar o cálculo XOR, todos os valores serão convertidos em binário:
5 e 2 são convertidos em binário: 0101 e 0010, respectivamente
2. Converta o resultado 0111 em decimal: 7
3. Então 52 = 7
Uso inteligente:
Ao contrário de outros idiomas, XOR em C e C ++ não usa XOR, mas "^", e o método de digitação é o turno+6. (E o "^" em outros idiomas geralmente significa multiplicar)
Se você precisar trocar os valores de duas variáveis, além das variáveis intermediárias emprestadas comumente usadas para troca, você também pode usar o XOR e usar apenas duas variáveis para troca, como:
a = a^b; b = b^a; a = a^b;
Explicação detalhada:
a1 = a^bb = a1^ba = a1^b = a1^(a1^b) = a1^a1^b = b
Perceber:
a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
Isso completa a troca de A e B.
Para resumir: a mesma variável e outra variável e seu valor XOR são iguais a si mesmo.
Caso de uso: ele pode ser usado em um determinado link ou mais links do algoritmo de criptografia, tornando o algoritmo mais complexo, menos fácil de ser rachado e tem maior segurança. [1]
Seção 2: Implementação no idioma Java:
string estática privada xor (string strhex_x, string strhex_y) {// converte x e y em forma binária string outrobinary = intoger.tobinarystring (inteiro.valueof (strhex_x, 16)); string thisbinary = integer.tobinarystring (integerger.valuef (strhex_y_y); Caso contrário, o zero esquerdo é suplementado se (outrobinary.length ()! = 8) {for (int i = outrobinary.length (); i <8; i ++) {outrobinary = "0"+outrobinary;}} se (thisbinary.length ()! "0"+thisbinary;}} // operação xor para (int i = 0; i <otherbinary.length (); i ++) {// Se o número da mesma posição for o mesmo, adicione 0, caso contrário, adicione 1 se (thisbinary.Charat (i) == outroBinary.Charat (i)) Result+= "0"; else {resultado+= "1";}} log.e ("código", resultado); retorna inteiro.tohexstring (Integer.parseint (resultado, 2));}Nota: O método acima é uma operação XOR entre um byte de uma sequência hexadecimal, como uma operação XOR para uma sequência hexadecimal de quinze bytes:
1312F70F900168D900007DF57B4884
Divisão Primeiro: 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
Isto é, o código de verificação de um bytes obtido é: e6
Além disso, adicionei um método de chamada simples a alguns amigos apenas para referência:
public String checkCode_0007 (String para) {String [] DATearr = new String [15]; Try {dateArs [0] = para.substring (0, 2); dateArr [1] = para.Substring (2, 4); DateArr [2] = parA.Substring (4, 6); 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); 20); dateArrr [10] = para.substring (20, 22); dateArDr [11] = para.substring (22, 24); dateArS [12] = para.substring (24, 26); dateArdo [13] = para.substring (26, 28); daterr [14] = para.ssubro (13] = para. Exception} String code = ""; para (int i = 0; i <dateArr.Length-1; i ++) {if (i == 0) {code = xorstring (DateArS [i], dateArr [i+1]);} else {code = xorstring (code, dateRr [i]);}} Code;}Em seguida, chame na função principal ou em outro método:
Código da String = CheckCode_0007 ("1312F70F900168D900007DF57B4884");O código é o código de verificação obtido.
Resumir
O exposto acima é o conteúdo inteiro deste artigo sobre a implementação de programação Java do exemplo de código de operação exclusiva ou de seqüências hexadecimais. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!