32 lines
961 B
Python
32 lines
961 B
Python
|
import gmpy2
|
||
|
from gmpy2 import mpz
|
||
|
|
||
|
def xor_custom(a, b):
|
||
|
"""
|
||
|
Wykonuje operację bitowego XOR na dwóch liczbach typu mpz reprezentujących bajty.
|
||
|
|
||
|
Args:
|
||
|
a (mpz): Pierwszy bajt (0-255) jako mpz.
|
||
|
b (mpz): Drugi bajt (0-255) jako mpz.
|
||
|
|
||
|
Returns:
|
||
|
mpz: Wynik operacji XOR (0-255) jako mpz.
|
||
|
"""
|
||
|
if not isinstance(a, mpz) or not isinstance(b, mpz):
|
||
|
raise TypeError("Oba argumenty muszą być typu mpz.")
|
||
|
|
||
|
result = mpz(0)
|
||
|
for i in range(8):
|
||
|
bit_a = (a >> i) & 1 # Pobiera i-ty bit z a
|
||
|
bit_b = (b >> i) & 1 # Pobiera i-ty bit z b
|
||
|
bit_result = bit_a ^ bit_b # XOR bitów
|
||
|
result |= (bit_result << i) # Ustawia wynikowy bit w odpowiedniej pozycji
|
||
|
return result
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
# Przykład użycia
|
||
|
a = gmpy2.mpz(0x57)
|
||
|
b = gmpy2.mpz(0x83)
|
||
|
wynik = xor_custom(a, b)
|
||
|
print(f"xor_custom({hex(int(a))}, {hex(int(b))}) = {hex(int(wynik))}")
|