Prefacio: No he escrito un blog durante mucho tiempo. Me siento tan ocupado en el último año, y tengo un trabajo infinito que hacer. Creo que muchos trabajadores de oficina se sentirán así. Recientemente, he realizado una operación de escritura de tarjetas en NFC y necesito calcular un bit de verificación. En términos generales, la mayoría de los bits de verificación se obtienen mediante la operación XOR de los primeros bytes.
Ahora déjame hablar sobre los escenarios que uso:
Escriba datos de 16 bytes en la tarjeta CPU (como una tarjeta de tráfico), y el último byte es el código de verificación: los primeros quince bytes Xor.
Comencé a buscar algunos algoritmos escritos por otros en Internet y descubrí que el resultado del cálculo era incorrecto, o la escritura era demasiado complicado, así que escribí uno yo mismo, lo que sentía que era relativamente simple. Ahora lo compartiré contigo, espero comunicarte juntos.
Sección 1: ¿Qué es la operación XOR (principalmente extraída de la enciclopedia de Baidu, se pueden omitir botas para niños familiares)?
definición:
Exclusivo, el inglés es exclusivo o abreviado como Xor
Xor es un operador matemático. Se aplica a operaciones lógicas. El símbolo matemático de Xor es "", y el símbolo de la computadora es "Xor". El algoritmo es:
ab = (¬a∧b) ∨ (a∧¬b)
Si los valores A y B no son los mismos, el resultado XOR es 1. Si los valores A y B son los mismos, el resultado XOR es 0.
Exclusivo o también se llama operación semi-adición. Su algoritmo es equivalente a la adición binaria sin transporte: en binario, 1 se usa para representar verdadero y 0 es falso, entonces el algoritmo de exclusivo o es: 00 = 0, 10 = 1, 01 = 1, 11 = 0 (ambos son 0, diferentes es 1). Estas leyes son las mismas que la adición, pero no llevan.
Xor se conoce como Xor, Eor y Ex-o
Hay tres tipos de operadores en el programa: XOR, XOR y.
Cómo usarlo es como sigue
z = xy
z = xxory
Reglas de operación:
1.AA = 0
2.AB = BA
3.abc = a (bc) = (ab) c;
4.D = ABC puede deducir A = DBC.
5.ABA = b.
6. Si x es el número binario 0101, y es el número binario 1011
Entonces xy = 1110
Solo cuando los dos bits de comparación son diferentes, el resultado es 1, de lo contrario, el resultado es 0
Es decir, "Cuando dos entradas son las mismas, son 0, y cuando son diferentes, ¡son 1"!
lógica:
Expresión lógica: f = ab'a'b ((ab'a'b) '= ab⊙a'b', ⊙ es la operación "misma o")
La tabla de verdad de la lógica de XOR se muestra en la Figura 1
Los símbolos lógicos se muestran en la Figura 2. La relación entre la lógica XOR es: cuando AB es diferente, la salida P = 1; Cuando AB es lo mismo, la salida P = 0. "" es un símbolo de operación XOR, y la lógica XOR también es una combinación o no lógica, y su expresión lógica es:
P = AB
De la Figura 1, las reglas de la operación XOR son
00 = 0,01 = 1
10 = 1,11 = 0
Fórmula mental: 0 es la misma, 1 es la misma
De hecho, Xor se define en inglés como (isone), pero no es decir, cuando solo uno es verdadero (1), tome verdad (1).
efecto:
Se usa comúnmente en las computadoras. El símbolo lógico de XOR se usa generalmente con XOR, que también es útil:
Verdadero o falso = verdadero
Falso verdadero = verdadero
Falso = falso
Verdadero = falso
O:
TrueFalse = True
Falsetrue = verdadero
Falsefalse = falso
Truetrue = falso
Algunos lenguajes de computadora usan 1 para representar verdadero y 0 para representar falsos, por lo que los dos bytes son exclusivos o como sigue
Los siguientes son dos valores binarios para el cálculo de XOR:
En realidad, se usan valores decimales, así que echemos un vistazo a cómo se calculan dos valores decimales para XOR:
52 =?
1. Antes de realizar el cálculo de XOR, todos los valores se convertirán en binario:
5 y 2 se convierten en binario: 0101 y 0010 respectivamente
2. Convierta el resultado 0111 a decimal: 7
3. Entonces 52 = 7
Uso inteligente:
A diferencia de otros idiomas, Xor en C y C ++ no usa Xor, sino "^", y el método de tipificación es Shift+6. (Y el "^" en otros idiomas generalmente significa multiplicar)
Si necesita intercambiar los valores de dos variables, además de las variables intermedias prestadas de uso común para el intercambio, también puede usar XOR y solo usar dos variables para el intercambio, como:
a = a^b; b = b^a; a = a^b;
Explicación detallada:
a1 = a^bb = a1^ba = a1^b = a1^(a1^b) = a1^a1^b = b
Aviso:
a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
Esto completa el intercambio de A y B.
Para resumir: la misma variable y otra variable y su valor XOR son iguales a sí mismo.
Caso de uso: se puede usar en un determinado enlace o más enlaces del algoritmo de cifrado, lo que hace que el algoritmo sea más complejo, menos fácil de agrietarse y tiene mayor seguridad. [1]
Sección 2: Implementación en el lenguaje Java:
privado static string xor (string strhex_x, string strhex_y) {// Convertir x e y en forma binaria string string otrobinary = integer.tobinaryString (integer.valueOf (strhex_x, 16)); string thisBinary = integer.tobinaryString (integer.valueOf (strhex_y, 16)); string string string string string = ""; binario, de lo contrario, el cero de la izquierda se complementa si (otrobinary.length ()! = 8) {for (int i = otherBinary.length (); i <8; i ++) {otherBinary = "0"+ATherBinary;}} if (thisBinary.length ()! = 8) {para (int i = thisBinary.length (); i <8; i ++) "0"+thisBinary;}} // xor operación para (int i = 0; i <otherbinary.length (); i ++) {// Si el número de la misma posición es el mismo, agregue 0, agregue 1 if (thisBinary.Charat (i) == OTROBINAR.CHARAT (I)) Resultado+= "0"; else {resultado+= "1";}} log.e ("código", resultado); return integer.tohexString (integer.parseInt (resultado, 2));}Nota: El método anterior es una operación XOR entre un byte de una cadena hexadecimal, como una operación XOR para una cadena hexadecimal de quince bytes:
1312F70F900168D900007DF57B4884
División primero: 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
Es decir, el código de verificación de un byte obtenido es: E6
Además, he agregado un método de llamada simple a algunos amigos solo como referencia:
public String checkcode_0007 (string para) {string [] datEreRr = new String [15]; try {datEreRr [0] = para.substring (0, 2); datEreRr [1] = para.substring (2, 4); datearr [2] = para.subring (4, 6); dataRr [3] para.substring (8, 10); datEreRr [5] = para.substring (10, 12); datEreRr [6] = para.substring (12, 14); datearr [7] = para.substring (14, 16); datearr [8] = para.subring (16, 18); datearr [9] = para.substring (18, 18, 18, para. 20); datEreRr [10] = para.substring (20, 22); datEreRr [11] = para.substring (22, 24); datEreRr [12] = para.substring (24, 26); datearr [13] = para.substring (26, 28); datearr [14] = para.substring (28, 30);} Catch (excepción (excepción a) Handle Exception} String Code = ""; for (int i = 0; i <datearr.length-1; i ++) {if (i == 0) {code = xorString (datEreRr [i], datearr [i+1]);} else {code = xorString (código, dataARR [i]);} Code;}Luego llámelo en la función principal u otro método:
Código de cadena = checkcode_0007 ("1312f70f900168d90000007df57b4884");El código es el código de verificación obtenido.
Resumir
Lo anterior es todo el contenido de este artículo sobre la implementación de la programación de Java del ejemplo de ejemplo de exclusivo u operación de cadenas hexadecimales. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!