Préface: je n'ai pas écrit de blog depuis longtemps. Je me sens tellement occupé au cours de la dernière année, et j'ai un travail sans fin à faire. Je crois que de nombreux employés de bureau ressentiront cela. Récemment, j'ai effectué une opération de rédaction de cartes sur NFC et j'ai besoin de calculer un bit de contrôle. D'une manière générale, la plupart des bits de contrôle sont obtenus par le fonctionnement XOR des premiers octets.
Maintenant, permettez-moi de parler des scénarios que j'utilise:
Écrivez des données de 16 octets dans la carte CPU (comme une carte de circulation), et le dernier octet est le code de vérification - les quinze premiers octets XOR.
J'ai commencé à chercher des algorithmes écrits par d'autres sur Internet et j'ai constaté que le résultat du calcul était mauvais, ou que l'écriture était trop compliquée, alors j'en ai écrit une moi-même, qui pensait que c'était relativement simple. Maintenant, je vais le partager avec vous, j'espère communiquer avec vous ensemble.
Section 1: Quelle est l'opération XOR (principalement extrait de la Baidu Encyclopedia, les bottes familières pour enfants peuvent être ignorées)
définition:
Exclusiveor, l'anglais est exclusifor, ou abrégé comme xor
Xor est un opérateur mathématique. Il est appliqué aux opérations logiques. Le symbole mathématique de XOR est "", et le symbole de l'ordinateur est "xor". L'algorithme est:
ab = (¬a∧b) ∨ (a∧¬B)
Si les valeurs A et B ne sont pas les mêmes, le résultat XOR est 1. Si les valeurs A et B sont les mêmes, le résultat XOR est 0.
Exclusif ou est également appelé opération de semi-addition. Son algorithme est équivalent à l'addition binaire sans report: en binaire, 1 est utilisé pour représenter True et 0 est faux, alors l'algorithme d'exclusivité ou est: 00 = 0, 10 = 1, 01 = 1, 11 = 0 (les deux sont 0, différents sont 1). Ces lois sont les mêmes que l'addition, mais ne portent pas.
Xor est appelé xor, eor et ex-ou
Il existe trois types d'opérateurs dans le programme: XOR, XOR et.
Comment l'utiliser est comme suit
z = xy
z = xxory
Règles de fonctionnement:
1.AA = 0
2.AB = BA
3.Abc = a (bc) = (ab) c;
4.D = ABC peut déduire A = DBC.
5.Aba = b.
6. Si x est le numéro binaire 0101, y est le numéro binaire 1011
Alors xy = 1110
Ce n'est que lorsque les deux bits de comparaison sont différents, le résultat est 1, sinon le résultat est 0
Autrement dit, "Lorsque deux entrées sont les mêmes, elles sont 0, et lorsqu'elles sont différentes, elles sont 1"!
logique:
Expression logique: f = ab'a'b ((ab'a'b) '= ab⊙a'b', ⊙ est la "même ou" opération)
Le tableau de vérité de la logique XOR est illustré à la figure 1
Les symboles logiques sont illustrés à la figure 2. La relation entre la logique XOR est: lorsque AB est différent, la sortie p = 1; Lorsque AB est le même, sortie p = 0. "" Est un symbole de fonctionnement XOR, et la logique XOR est également une combinaison avec ou non logique, et son expression logique est:
P = ab
De la figure 1, les règles de l'opération XOR sont
00 = 0,01 = 1
10 = 1,11 = 0
Formule mentale: 0 est le même, 1 est le même
En fait, XOR est défini en anglais comme (ISOne), mais notant, c'est-à-dire, quand un seul est vrai (1), prenez vrai (1).
effet:
Il est couramment utilisé dans les ordinateurs. Le symbole logique de XOR est généralement utilisé avec XOR, ce qui est également utile:
Vrai ou false = vrai
Faux True = True
Faux = faux
True = false
Ou:
Truefalse = true
Falsetrue = vrai
Falsefalse = false
TrueTrue = false
Certains langages de l'ordinateur utilisent 1 pour représenter True et 0 pour représenter False, de sorte que les deux octets sont exclusifs dans le bit ou suit
Voici deux valeurs binaires pour le calcul XOR:
En réalité, des valeurs décimales sont utilisées, alors examinons comment deux valeurs décimales sont calculées pour XOR:
52 =?
1. Avant d'effectuer un calcul XOR, toutes les valeurs seront converties en binaire:
5 et 2 sont convertis en binaire: 0101 et 0010 respectivement
2. Convertir le résultat 0111 en décimal: 7
3. SO 52 = 7
Utilisation intelligente:
Contrairement à d'autres langues, XOR en C et C ++ n'utilise pas XOR, mais "^", et la méthode de frappe est Shift + 6. (Et le "^" dans d'autres langues signifie généralement se multiplier)
Si vous devez échanger les valeurs de deux variables, en plus des variables intermédiaires empruntées couramment utilisées pour l'échange, vous pouvez également utiliser XOR et utiliser uniquement deux variables pour l'échange, telles que:
a = a ^ b; b = b ^ a; a = a ^ b;
Explication détaillée:
a1 = a ^ bb = a1 ^ ba = a1 ^ b = a1 ^ (a1 ^ b) = a1 ^ a1 ^ b = b
Avis:
a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
Cela complète l'échange de a et b.
Pour résumer: la même variable et une autre variable et sa valeur XOR sont égales à elle-même.
Cas d'utilisation: il peut être utilisé dans un certain lien ou plus de liens de l'algorithme de chiffrement, ce qui rend l'algorithme plus complexe, moins facile à être fissuré et a une sécurité plus élevée. [1]
Section 2: Implémentation en langue Java:
chaîne statique privée xor (chaîne strhex_x, chaîne strhex_y) {// convertir x et y en formulaire binaire chaîne an autrebinar Binary, sinon le zéro gauche est complété if (an autrebinary.length ()! = 8) {for (int i = an autrebinary.length (); i <8; i ++) {an autrebinary = "0" + autrebinary;}} if (thisbinary.length ()! = 8) {for (int i = thisbinary. "0" + thisbinary;}} // operation xOR pour (int i = 0; i <an autreBinary.length (); i ++) {// Si le nombre de la même position est le même, ajoutez 0, sinon ajouter 1 if (thisbinary.charat (i) == Anotherbinary.Charat (i)) résultat + = "0"; else {result + = "1";}} log.e ("code", résultat); return Integer.tohexString (Integer.Parseint (résultat, 2));}Remarque: La méthode ci-dessus est une opération XOR entre un octet d'une chaîne hexadécimale, comme une opération XOR pour une chaîne hexadécimale de quinze octets:
1312F70F900168D900007DF57B4884
Split premier: 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
C'est-à-dire que le code de vérification obtenu un octet est: E6
De plus, j'ai ajouté une méthode d'appel simple à certains amis pour référence uniquement:
public String CheckCode_0007 (String Para) {String [] dataEarr = 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. para.substring (8, 10); dataearr [5] = para.substring (10, 12); datearr [6] = para.substring (12, 14); datearr [7] = para.substring (14, 16); datarr [8] = para.Substring (16, 18); Datearr [9] = Para.Substring (18, 18, 20); datearr [10] = para.substring (20, 22); datearr [11] = para.substring (22, 24); datearr [12] = para.substring (24, 26); datarr [13] = para.substring (26, 28); datarr [14] = para.SubString (28, 30);} Catch (// // / pale: Exception} 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;}Puis appelez-le dans la fonction principale ou toute autre méthode:
String code = CheckCode_0007 ("1312f70f900168d900007df57b4884");Le code est le code de contrôle obtenu.
Résumer
Ce qui précède est l'intégralité du contenu de cet article sur la mise en œuvre de la programmation Java de l'exemple de code de l'exemple exclusif ou du fonctionnement des chaînes hexadécimales. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!