Pendahuluan: Saya sudah lama tidak menulis blog. Saya merasa sangat sibuk dalam setahun terakhir, dan saya memiliki pekerjaan yang tak ada habisnya. Saya percaya banyak pekerja kantor akan merasa seperti ini. Baru -baru ini, saya telah melakukan operasi penulisan kartu di NFC dan perlu menghitung bit cek. Secara umum, sebagian besar bit cek diperoleh dengan operasi XOR dari beberapa byte pertama.
Sekarang izinkan saya berbicara tentang skenario yang saya gunakan:
Tulis data 16-byte ke dalam kartu CPU (seperti kartu lalu lintas), dan byte terakhir adalah kode verifikasi-lima belas byte xor pertama.
Saya mulai mencari beberapa algoritma yang ditulis oleh orang lain di internet dan menemukan bahwa hasil perhitungannya salah, atau tulisannya terlalu rumit, jadi saya menulis sendiri, yang merasa bahwa itu relatif sederhana. Sekarang saya akan membaginya dengan Anda, saya berharap dapat berkomunikasi dengan Anda bersama.
Bagian 1: Apa itu operasi XOR (terutama dikutip dari Baidu Encyclopedia, sepatu bot anak -anak yang akrab dapat dilewati)
definisi:
Eksklusif, Bahasa Inggris adalah eksklusif, atau disingkat xor
XOR adalah operator matematika. Ini diterapkan pada operasi logis. Simbol matematika XOR adalah "", dan simbol komputer adalah "xor". Algoritma adalah:
ab = (¬a∧b) ∨ (a∧¬b)
Jika nilai A dan B tidak sama, hasil XOR adalah 1. Jika nilai A dan B sama, hasil XOR adalah 0.
Eksklusif atau juga disebut operasi semi-addition. Algoritme -nya setara dengan penambahan biner tanpa carry: dalam biner, 1 digunakan untuk mewakili benar dan 0 adalah false, maka algoritma eksklusif atau: 00 = 0, 10 = 1, 01 = 1, 11 = 0 (keduanya keduanya 0, berbeda adalah 1). Undang -undang ini sama dengan penambahan, tetapi tidak membawa.
XOR disebut sebagai XOR, EOR, dan EX-OR
Ada tiga jenis operator dalam program: XOR, XOR, dan.
Bagaimana menggunakannya adalah sebagai berikut
z = xy
z = xxory
Aturan Operasi:
1.aa = 0
2.ab = Ba
3.abc = a (bc) = (ab) c;
4.D = ABC dapat menyimpulkan A = DBC.
5.aba = b.
6. Jika x adalah nomor biner 0101, y adalah nomor biner 1011
Lalu xy = 1110
Hanya ketika dua bit perbandingan berbeda, hasilnya adalah 1, jika tidak hasilnya adalah 0
Yaitu, "Ketika dua input sama, mereka adalah 0, dan ketika mereka berbeda, mereka 1"!
logika:
Ekspresi logis: f = ab'a'b ((ab'a'b) '= ab⊙a'b', ⊙ adalah operasi "sama atau"))
Tabel kebenaran logika XOR ditunjukkan pada Gambar 1
Simbol logis ditunjukkan pada Gambar 2. Hubungan antara logika XOR adalah: ketika AB berbeda, output p = 1; Ketika AB sama, output p = 0. "" adalah simbol operasi XOR, dan logika XOR juga merupakan kombinasi dengan atau non-logis, dan ekspresi logisnya adalah:
P = ab
Dari Gambar 1, aturan operasi XOR adalah
00 = 0,01 = 1
10 = 1,11 = 0
Formula mental: 0 adalah sama, 1 adalah sama
Faktanya, XOR didefinisikan dalam bahasa Inggris sebagai (ISOne), tetapi notboth, yaitu, ketika hanya satu yang benar (1), ambil benar (1).
memengaruhi:
Ini biasanya digunakan di komputer. Simbol logis XOR umumnya digunakan dengan XOR, yang juga berguna:
Benar atau salah = Benar
False true = true
False = false
True = false
Atau:
Truefalse = true
Falsetrue = true
FalseFalse = false
Truetrue = false
Beberapa bahasa komputer menggunakan 1 untuk mewakili true dan 0 untuk mewakili false, jadi kedua byte itu eksklusif bitwise atau sebagai berikut
Berikut ini adalah dua nilai biner untuk perhitungan XOR:
Pada kenyataannya, nilai desimal digunakan, jadi mari kita lihat bagaimana dua nilai desimal dihitung untuk xor:
52 =?
1. Sebelum melakukan perhitungan XOR, semua nilai akan dikonversi menjadi biner:
5 dan 2 masing -masing dikonversi menjadi biner: 0101 dan 0010
2. Konversikan hasil 0111 menjadi desimal: 7
3. Jadi 52 = 7
Penggunaan yang cerdas:
Tidak seperti bahasa lain, XOR dalam C dan C ++ tidak menggunakan XOR, tetapi "^", dan metode pengetikan adalah Shift+6. (Dan "^" dalam bahasa lain umumnya berarti berlipat ganda)
Jika Anda perlu menukar nilai dua variabel, selain variabel perantara yang umum digunakan untuk pertukaran, Anda juga dapat menggunakan XOR dan hanya menggunakan dua variabel untuk pertukaran, seperti:
a = a^b; b = b^a; a = a^b;
Penjelasan terperinci:
a1 = a^bb = a1^ba = a1^b = a1^(a1^b) = a1^a1^b = b
Melihat:
a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
Ini melengkapi pertukaran a dan b.
Singkatnya: variabel yang sama dan variabel lain dan nilai XOR -nya sama dengan dirinya sendiri.
Use Case: Dapat digunakan dalam tautan tertentu atau lebih banyak tautan dari algoritma enkripsi, membuat algoritma lebih kompleks, kurang mudah retak, dan memiliki keamanan yang lebih tinggi. [1]
Bagian 2: Implementasi dalam bahasa Java:
Private Static String XOR (String strhex_x, string strhex_y) {// Konversi x dan y menjadi bentuk biner string lainbinary = integer.tobinarystring (integer.valueof (strhex_x, 16)); string ini = integer.tobinerString (integer.valueof (strhex = stab; "); Biner, jika tidak nol kiri ditambah if (OtherBinary.length ()! = 8) {for (int i = OtherBinary.length (); i <8; i ++) {AnotherBinary = "0"+lainnya; "0"+Thisbinary;}} // Operasi XOR untuk (int i = 0; i <OtherBinary.length (); i ++) {// Jika jumlah posisi yang sama sama, tambahkan 0, jika tidak tambahkan 1 jika (Thisbinary.charat (i) == lainBinary.charat (i)) Hasil+= "0"; else {result+= "1";}} log.e ("kode", hasil); return integer.toHexString (integer.parseint (hasil, 2));}Catatan: Metode di atas adalah operasi XOR antara satu byte dari string heksadesimal, seperti operasi XOR untuk string heksadesimal lima belas-byte:
1312F70F900168D900007DF57B4884
Split First: 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
Artinya, kode verifikasi satu-byte yang diperoleh adalah: E6
Selain itu, saya telah menambahkan metode panggilan sederhana untuk beberapa teman hanya untuk referensi:
String publik checkCode_0007 (string para) {string [] dATeArr = string baru [15]; coba {dATeArr [0] = para. Para.substring (8, 10); DataArr [5] = para.substring (10, 12); DataArr [6] = para. 20); DataArr [10] = para.substring (20, 22); DataArr [11] = para.substring (22, 24); DataArr [12] = para. Tangani 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 (kode, dataEarr [i]);}} return {code = xorstring (kode, dataAreRr [i]);}} pengembalianKemudian sebut saja di fungsi utama atau metode lain:
Kode string = checkCode_0007 ("1312f70f900168d900007df57b4884");Kode adalah kode cek yang diperoleh.
Meringkaskan
Di atas adalah seluruh konten artikel ini tentang implementasi pemrograman Java dari contoh kode eksklusif atau operasi string heksadesimal. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!