English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
서론: 요즘 blog을 쓰지 않아서 오랫동안 지나갔습니다. 최근 한 해는 정말 바쁘고, 여러 가지 완료할 수 없는 일들이 많았습니다. 많은 직장인들도 이런 느낌을 받을 것입니다. 최근 NFC 쓰기 작업에서, 검증 비트를 계산해야 했습니다. 일반적으로, 검증 비트는 몇 가지 바이트에서 이거나 연산을 통해 얻어집니다.
제가 사용하는 상황을 먼저 설명하겠습니다:
하나를16바이트 데이터는 CPU 카드(예: 교통 카드)에 쓰이며, 마지막 바이트는 검증 코드입니다---처음 열한 바이트 이거나.
나는 인터넷에서 다른 사람들이 쓴 알고리즘을 찾아보았지만, 계산 결과가 잘못되거나 너무 복잡하다는 것을 발견했습니다. 그래서 나는 자신감 있게 하나를 작성했고, 간단하다고 느꼈습니다. 지금 여러분과 공유하고, 교류하고 싶습니다.
第一节:이거나 연산이 무엇인가(주로 백도어에서 가져옴, 잘 알고 계신 분들은 건너뛰세요)
정의:
이거나는 exclusiveOR로 알려져 있으며, xor로 약칭될 수 있습니다
이거나(xor)은 수학 연산자입니다. 그것은 논리 연산에 적용됩니다. 이거나의 수학 기호는 '⊕'이며, 컴퓨터 기호는 'xor'입니다. 그 연산 규칙은 다음과 같습니다:
a⊕b=(¬a∧b)∨(a∧¬b)
a와 b 두 값이 다르면, 이거나 결과는1。a와 b 두 값이 같으면, 이거나 결과는 0입니다.
이거나는 반추 연산으로 불리며, 연산 규칙은 진리 값이 없는 이진 더하기와 동일합니다: 이진 값에서1정의되면 참, 0이면 거짓을 나타내며, 이xor의 연산 규칙은 다음과 같습니다: 0⊕0=0,1⊕0=1,0⊕1⊕1,1.따라서1=0(같으면 0, 다르면1),이 법칙들은 더하기와 동일하지만, 진리 값이 없다.
이거나는 XOR, EOR, EX로 약칭된다.-OR
프로그램에는 XOR, xor, ⊕라는 세 가지 연산자가 있습니다.
사용 방법은 다음과 같습니다
z=x⊕y
z=xxory
연산 규칙:
1.a⊕a=0
2.a⊕b=b⊕a
3.a⊕b⊕c=a⊕(b⊕c)=(a⊕b)⊕c;
4.d=a⊕b⊕c를 통해 a=d⊕b⊕c를 유도할 수 있습니다.
5.a⊕b⊕a=b.
6.x는 이진수 0이면101y는 이진수입니다1011
이면 x⊕y=1110
두 비교 비트가 다를 때 결과가1되면 결과가 0입니다
즉 “ 두 입력이 같으면 0이고, 다르면1”!
논리:
논리 표현식: F=AB'⊕A'B((AB'⊕A'B)'=AB⊙A'B',⊙는 “같은” 연산입니다)
XOR 논리의 진리 표는 다음과 같습니다1에
그림2그림으로 표현된다. XOR 논리의 관계는 다음과 같습니다: AB가 다를 때, 출력 P=1;AB가 같을 때, 출력 P=0。“⊕”은 XOR 연산 기호이며, XOR 논리도 AND 논리와 OR 논리의 조합입니다. 논리 표현식은 다음과 같습니다:
P=A⊕B
그림1따라서, XOR 연산의 규칙은 다음과 같습니다
0⊕0=0,0⊕1⊕1
1⊕0=1,1.따라서1=0
요诀: 같으면 0을 선택하고, 다르면1
실제로 XOR는 영어에서는 eitherone(isone),butnotboth으로 정의되며, 즉 두 가지 모두가 아닌 하나만 진짜입니다(1)。이 경우, 진짜를 선택합니다(1)。
작용:
컴퓨터에서 일반적으로 사용되며, XOR(logical symbol)는 일반적으로 xor로 사용되며, ⊕도 사용됩니다:
진짜⊕허위=진짜
허위⊕허위=진짜
허위⊕허위=허위
진짜⊕진짜=허위
또는 다음과 같습니다:
True⊕False=True
False⊕True=True
False⊕False=False
True⊕True=False
일부 컴퓨터 언어는1정리하면, 두 바이트의 비트별 XOR는 다음과 같습니다
실제로 사용하는 것은 모두 십진수 값입니다. 따라서 두 십진수 값을 XOR 계산하는 방법을 보여드리겠습니다:
아래는 두 이진수 값을 XOR 계산하는 예입니다:
5.따라서2현실에서 사용하는 것은 모두 십진수 값입니다. 따라서 두 십진수 값을 XOR 계산하는 방법을 보여드리겠습니다:
1=?
5.이진수로 XOR 계산 전에 모든 값을 이진수로 변환할 것입니다:2와101을 이진수로 각각 변환하면: 010
2、00111.결과 07
3십진수로 변환된:5.따라서2⊕7
=
취급법:++다른 언어와 달리, C 언어와 C+6。(그런 다른 언어의 “^”는 일반적으로 배수를 나타냅니다)
두 변수의 값을 교환하려면, 일반적으로 사용하는 중간 변수를 사용하여 교환 외에도 XOR를 사용할 수 있으며, 두 변수 만으로 교환할 수 있습니다. 예를 들어:
a=a^b; b=b^a; a=a^b;
상세히:
a1=a^b b=a1^b a=a1^b=a1^(a1^b)=a1^a1^b=b
주의:
a = a ^ b ^ (b = a);//이러한 형식은 잘못된 UB 행위이며, 다른 컴파일러에서는 다른 결과를 얻을 수 있습니다. 사용하지 마세요.
이렇게 하면 a와 b를 교환했습니다.
결론적으로: 동일한 변수와 다른 변수 그리고 그 이거나 값과 이거나 연산은 본인과 같습니다.
사용 사례: 암호화 알고리즘의 일부 또는 여러 부분에 사용할 수 있으며, 알고리즘을 더 복잡하게 하여 깨기 어려워, 보안성이 높습니다. [1]
第二节: Java 언어로 구현:
private static String xor(String strHex_X, String strHex_Y){ //x, y를 이진형으로 변환합니다. String anotherBinary = Integer.toBinaryString(Integer.valueOf(strHex_X,16)); String thisBinary = Integer.toBinaryString(Integer.valueOf(strHex_Y,16)); String result = ""; //판단하여:8비트 이거나, 아니면 왼쪽으로 0을 추가합니다. 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; } } //이거나 연산 for (int i=0; i<anotherBinary.length(); i++{ //동일 위치의 수가 같으면 0을 추가하여, 다를 경우 추가합니다.1 if(thisBinary.charAt(i) == anotherBinary.charAt(i)) result+="0"; else{ result+="1"; } } Log.e("code",result); return Integer.toHexString(Integer.parseInt(result, 2)); }
주의: 위 메서드는 16진수 문자열의 일바이트 간의 이거나 연산에 대한 것입니다. 예를 들어, 15바이트의 16진수 문자열의 이거나 연산:
1312f70f900168d900007df57b4884
먼저 분할하여: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
즉, 얻은 일바이트 검증 코드는 다음과 같습니다: e6
추가하여 일부 친구들에게 간단한 호출 메서드를 제공했습니다. 참고용입니다:
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: 예외 처리 } 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; }
그런 다음 메인 함수나 다른 메서드에서 호출합니다:
String code = checkcode_0007("1312f70f900168d900007df57b4884");
code는 얻은 검증 코드입니다。
정리
이것이 Java 프로그래밍에서 16진수 문자열 XOR 연산 코드 예제에 대한 모든 내용입니다. 이를 통해 도움이 되길 바랍니다. 관심이 있는 분은 이 사이트의 다른 관련 주제를 계속 참조할 수 있으며, 부족한 점이 있으면 댓글을 통해 지적해 주시기 바랍니다. 친구들의 이 사이트에 대한 지지에 감사합니다!
언급: 이 문서의 내용은 인터넷에서 가져왔으며, 원저자가 소유하고 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 이 사이트는 소유권을 가지지 않으며, 인공적인 편집을하지 않았으며, 관련 법적 책임을 부담하지 않습니다. 저작권 위반이 의심되는 내용이 있으면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com(메일을 보내면, #을 @으로 변경하여 신고해 주시고, 관련 증거를 제공해 주시면, 사실이 확인되면 이 사이트는 즉시 위반된 내용을 삭제할 것입니다。)